我以前想过这个问题,但从来没有想过。我想我用Python做过,但从来没用PHP。
定义一个基本的php数组:
$arr = array (array(1,2,3), array(4,5,6), array(7,8,9));
然后运行这个片段:
foreach ($arr as $row)
{
list($a, $b, $c) = $row;
echo "$a, $b, $c <br>";
}
这太常见了,在我的php职业生涯中,我一定做了一百万次。。。但这似乎有点浪费$row是一个临时变量,从未真正使用过,并且list()=行似乎应该能够放入foreach括号中
像这样的东西(当然,这不起作用):
foreach ($arr as list($a, $b, $c) = $row)
{
echo "$a, $b, $c <br>";
}
两者都没有:
foreach ($arr as list($a, $b, $c))
{
echo "$a, $b, $c <br>";
}
有人想出一个很酷的快捷方式吗?谢谢
是的,有点。使用此:
while( list( $key, list( $a, $b, $c ) ) = each( $array ) ) {
// do stuff here
}
请注意,使用list
两次-each
返回键值对,该值也是一个数组,因此我们再次使用list
。
也可以使用list( , list( $a, $b, $c ) )
,如果需要,可以省略$key
。但我认为这是一种丑陋的语法。)
虽然这不会将列表嵌入foreach,但您可以找到的另一种方法是使用for而不是foreach,这样就可以绕过时态变量:
$a = array (array(1,2,3), array(4,5,6), array(7,8,9));
$count=(int)count($a);
for ($i=(int)0; $i<count; $i++) {
list($a, $b, $c)=$a[$i];
echo "$a, $b, $c<br />";
}
这样,我又添加了两个变量,但它们只包含整数,这通过删除将包含数组的时态变量来明确减少内存使用。
你可以试试这个:
$array = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) );
for($next = current($array), list($a, $b, $c) = $next;
// ^ current array ^ current list
$next;
// ^ check if array
$next = next($array), list($a, $b, $c) = $next)
// ^ next array ^ next array's list
{
echo "$a, $b, $c <br>".PHP_EOL;
}
演示:http://codepad.org/cuYl6iaa
输出:
1, 2, 3 <br>
4, 5, 6 <br>
7, 8, 9 <br>