是否可以在PHP的foreach语句中嵌入list函数?

时间:2012-03-14 19:39:06

标签: php list foreach shortcut

我之前已经考虑过这个问题,但从来没有在任何地方找到它。我想我已经用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>";
}

有没有人想出一个很酷的快捷方式? 谢谢!

3 个答案:

答案 0 :(得分:3)

是的,有点儿。使用此:

while( list( $key, list( $a, $b, $c ) ) = each( $array ) ) {
    // do stuff here
}

请注意,使用list两次 - each会返回键值对,而值也是一个数组,因此我们再次使用list

您还可以使用list( , list( $a, $b, $c ) ),如果需要,可以省略$key。但我认为这是一种丑陋的语法。 ;)

答案 1 :(得分:1)

你可以试试这个:

$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>

答案 2 :(得分:1)

虽然这不会将列表嵌入到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 />";
}

有了这个我添加了2个变量,但它们只包含整数,definitelly通过删除包含数组的时间变量来减少内存使用量。