2012-04-12 27 views
8

Jak widać in this other answer, istnieje kilka sposobów na jednoczesne powtarzanie dwóch macierzy o tej samej wielkości; jednak wszystkie metody mają dość poważną pułapkę. Oto niektóre z zastrzeżeń z sugerowanymi metodami:PHP: Najlepszy sposób na iterację dwóch równoległych tablic?

  • Nie można użyć wartości FALSE w jednej z tablic.
  • Wartości skalarne można używać tylko w jednej z tablic.
  • Należy użyć tablic indeksowanych numerycznie.
  • Obie tablice muszą mieć te same klucze.
  • Itd

Moje pytanie brzmi - jest jakiś sposób to zrobić, który nie cierpi na którekolwiek z tych (lub innych) istotnych zastrzeżeń?

Pamiętaj, że po prostu pytam o to z ciekawości; Nie mam na myśli przypadku użycia, ani nawet nie wiem, czy taki przypadek rzeczywiście istnieje, czy byłby przydatny/praktyczny w realnym scenariuszu. Jednak tutaj jest jakiś przykład dane:

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

Co jest złego w odpowiedzi beefsack do tej kwestii? Wygląda na to, że zadziała, niezależnie od zawartości lub struktury tablic. – nickb

+0

to nie działa, ponieważ ''b' => FALSE' @nickb – Baba

+0

@Baba - Nie, [działa z' 'b' => false'] (http://codepad.viper-7.com/nNZuNj). – nickb

Odpowiedz

21

Można użyć MultipleIterator:

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

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

Można znaleźć więcej przykładów dotyczących różnych opcji in the docs.

+0

Tak czyste. +1 :) – AlienWebguy

+0

+1 Wiedziałem, że musi być lepsza metoda. Dzięki za uczenie mnie czegoś :-) – 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

Twój skrypt zawiera błąd i nie działałby, gdyby suma tablic w '$ arr2'>' $ arr1' ... skorygowała to zanim zaczną cię głosować – Baba

+0

@Baba Miałem serwer do test, ponieważ tak naprawdę nie przetestowałem go za pierwszym razem. Nie był to problem z długością tablic (z tego, co mogłem powiedzieć), ale były problemy (np. Nie mam 5.4 na serwerze, na którym testowałem), więc dziękuję za wskazanie tego. – craniumonempty

Powiązane problemy