Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
"rendimiento" sobrescribe "rendimiento de" elementos
<?php function generator1(): \Traversable { yield 'alpha'; yield 'beta'; yield 'delta'; } function generator2(): \Traversable { yield from generator1(); yield 'upsilon'; yield 'omega'; } function resolve(iterable $generator) { foreach ($generator as $index => $item) echo "$index $item" . PHP_EOL; } resolve(generator1()); echo PHP_EOL; resolve(generator2()); die;

Produce este resultado:

 0 alpha 1 beta 2 delta 0 alpha 1 beta 2 delta 0 upsilon 1 omega

Ese último flujo debería ser:

 0 alpha 1 beta 2 delta 3 upsilon 4 omega

¿Que está pasando aqui? ¿Es esto un error en PHP (estoy ejecutando v7.4.10 en Ubuntu). ¿Cómo obtengo el resultado correcto sin usar una matriz o alguna otra forma de colector?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El resultado es una especialidad de la función iterator_to_array(). El segundo parámetro debe establecerse en falso para que todos los valores se registren como ya se indicó en el comentario.

Esto también se señala específicamente en el manual de PHP .

 function generator1(): \Traversable { yield 'alpha'; yield 'beta'; yield 'delta'; yield 'gamma'; yield 'epsilon'; yield 'eta'; } function generator2(): \Traversable { yield from generator1(); yield 'upsilon'; yield 'omega'; } var_dump(iterator_to_array(generator2())); var_dump(iterator_to_array(generator2(), false));

Resultado:

 array(6) { [0]=> string(7) "upsilon" [1]=> string(5) "omega" [2]=> string(5) "delta" [3]=> string(5) "gamma" [4]=> string(7) "epsilon" [5]=> string(3) "eta" } array(8) { [0]=> string(5) "alpha" [1]=> string(4) "beta" [2]=> string(5) "delta" [3]=> string(5) "gamma" [4]=> string(7) "epsilon" [5]=> string(3) "eta" [6]=> string(7) "upsilon" [7]=> string(5) "omega" }

Pruébelo usted mismo en la caja de arena.

Esto queda claro cuando las claves y los valores se generan con foreach.

 foreach(generator2() as $key => $value){ var_dump($key,$value); }

Producción:

 int(0) string(5) "alpha" int(1) string(4) "beta" int(2) string(5) "delta" int(3) string(5) "gamma" int(4) string(7) "epsilon" int(5) string(3) "eta" int(0) string(7) "upsilon" int(1) string(5) "omega"
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!