PHP:迭代两个并行数组的最佳方法是什么?
如看到in this other answer,有几种方法可以同时迭代两个相同大小的数组;然而,所有这些方法都有相当大的缺陷。以下是一些提示方法的注意事项:PHP:迭代两个并行数组的最佳方法是什么?
- 您不能在其中一个数组中使用
FALSE
值。 - 您只能在其中一个数组中使用标量值。
- 您必须使用数字索引的数组。
- 两个阵列必须共享相同的密钥。
- 等等
我的问题是 - 是有这样做不从这些(或其他)显著警告遭受的方法?
请记住,我只是出于好奇而问这个问题;我没有考虑用例,也不知道这种情况是否真实存在,或者在现实世界中是否有用/实用。然而,这里是一些示例数据:
$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ];
$arr2 = [ 'foo', TRUE, 7 ];
您可以使用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更多的例子。
很干净。 +1 :) – AlienWebguy 2012-04-12 22:27:58
+1我知道必须有更好的方法。感谢您教我的东西:-) – FtDRbwLXw6 2012-04-13 00:06:08
<?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
}
你的脚本有错误,如果总数组在'$ arr2'>'$ arr1' ...在他们开始投票之前纠正它,你会失败 – Baba 2012-04-12 21:59:44
@Baba我找到一台服务器测试,因为我第一次没有真正测试它。这并不是数组长度的问题(从我所知道的情况来看),但是存在一些问题(比如我在测试的服务器上没有5.4),所以感谢您指出了这一点。 – craniumonempty 2012-04-12 22:16:14
由于PHP 5.5,你可以这样做:
foreach (array_map(null, $array1, $array2) as list($item1, $item2))
{
var_dump($item1);
var_dump($item2);
}
http://us3.php.net/manual/en/control-structures.foreach.php#control-structures.foreach.list
这有什么错beefsack的问题的答案?似乎它会工作,无论数组的内容或结构如何。 – nickb 2012-04-12 21:44:11
它不会起作用,因为''b'=> FALSE' @nickb – Baba 2012-04-12 21:53:43
@Baba - 不,[它适用于''b'=> false'](http://codepad.viper-7.com/nNZuNj )。 – nickb 2012-04-13 13:10:57