Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

286
Visualizações
"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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda