2012-04-12 12 views
8

Como se ve in this other answer, hay varias formas de iterar dos matrices del mismo tamaño simultáneamente; sin embargo, todos los métodos tienen una trampa bastante significativa. Estas son algunas de las advertencias con los métodos sugeridos:PHP: ¿La mejor forma de iterar dos matrices paralelas?

  • No puede utilizar FALSE valores en una de las matrices.
  • Solo puede usar valores escalares en una de las matrices.
  • Debe usar matrices indexadas numéricamente.
  • Ambas matrices deben compartir las mismas claves.
  • Etc.

Mi pregunta es - ¿existe un método para hacer esto que no sufre de cualquiera de estos (u otros) advertencias importantes?

Tenga en cuenta que simplemente estoy preguntando esto por curiosidad; No tengo ningún caso de uso en mente, ni siquiera sé si tal caso realmente existe o sería útil/práctico en un escenario del mundo real. Sin embargo, aquí hay algunos datos de ejemplo:

$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ]; 
$arr2 = [ 'foo', TRUE, 7 ]; 
+0

¿Qué pasa con la respuesta de beefsack a esa pregunta? Parece que funcionaría independientemente del contenido o la estructura de las matrices. – nickb

+0

no funcionaría porque ''b' => FALSE' @nickb – Baba

+0

@Baba - No, [funciona con' 'b' => falso'] (http://codepad.viper-7.com/nNZuNj) – nickb

Respuesta

21

Se puede utilizar un MultipleIterator:

$iterator = new MultipleIterator; 
$iterator->attachIterator(new ArrayIterator($array1)); 
$iterator->attachIterator(new ArrayIterator($array2)); 

foreach ($iterator as $values) { 
    var_dump($values[0], $values[1]); 
} 

usted puede encontrar más ejemplos en relación con las diversas opciones in the docs.

+0

Tan limpio. +1 :) – AlienWebguy

+0

+1 Sabía que tenía que haber un método mejor. Gracias por enseñarme algo :-) – FtDRbwLXw6

1
<?php 

$arr1 = array('a' => 1, 'b' => FALSE, 'c' => new DateTime()); 
$arr2 = array('foo', TRUE, 7, 5); 


reset($arr1); 
reset($arr2);  

while ((list($key, $val) = each($arr1)) 
    && (list($key2, $val2) = each($arr2)) 
) { 
    var_dump($val,$val2); 
    // or whatever you wanted to do with them 
} 

http://www.php.net/manual/en/function.each.php

+1

tu secuencia de comandos tiene un error y no funcionaría si el total de matrices en '$ arr2'>' $ arr1' ... corrige antes de que empiecen a votarte – Baba

+0

@Baba He encontrado un servidor para prueba, porque realmente no lo probé la primera vez. No fue un problema con la longitud de las matrices (por lo que pude ver), pero hubo problemas (como que no tengo 5.4 en el servidor que probé), así que gracias por señalarlo. – craniumonempty

Cuestiones relacionadas