Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

294
Vistas
"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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda