2012-04-12 3 views
8

Как видно из in this other answer, существует несколько способов одновременного повторения двух одинаковых массивов; однако все методы имеют довольно значительную ошибку. Вот некоторые из предостережений с методами предложил:PHP: лучший способ повторить два параллельных массива?

  • Вы не можете использовать FALSE значения в одном из массивов.
  • Вы можете использовать только скалярные значения в одном из массивов.
  • Вы должны использовать числовые индексированные массивы.
  • Оба массива должны использовать одни и те же ключи.
  • Etc.

Мой вопрос - есть способ сделать это, который не страдает от какой-либо из этих (или других) существенных предостережений?

Имейте в виду, что я просто прошу об этом из любопытства; Я не имею в виду, и даже не знаю, действительно ли такой случай существует или будет полезен/практичен в реальном сценарии. Однако, вот несколько примеров данных:

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

Что случилось с ответом beefsack к этому вопросу? Похоже, что он будет работать независимо от содержимого или структуры массивов. – nickb

+0

это не сработает, потому что '' b '=> FALSE' @nickb – Baba

+0

@Baba - Нет, [работает с '' b' => false'] (http://codepad.viper-7.com/nNZuNj). – nickb

ответ

21

Вы можете использовать MultipleIterator:

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

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

Вы можете найти больше примеров, касающихся различных вариантов in the docs.

+0

Так чисто. +1 :) – AlienWebguy

+0

+1 Я знал, что должен быть лучший метод. Спасибо, что научили меня чему-то :-) – 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

ваш скрипт имеет ошибку и не будет работать, если суммарные массивы в '$ arr2'>' $ arr1' ... исправить его, прежде чем они начнут голосовать вам – Baba

+0

@Baba Я нашел сервер для тест, потому что я на самом деле не тестировал его первым. Это не проблема с длиной массивов (из того, что я мог сказать), но были проблемы (например, у меня нет 5,4 на сервере, на котором я тестировал), поэтому спасибо, что указали это. – craniumonempty

Смежные вопросы