PHP中使用foreach循环的匿名数组

3

我想知道PHP如何处理匿名数组,如果我这样使用它:

foreach(array('a', 'b') as $foo) {
    // ...
}

如果数组在每一步中被重新创建,这样做就行不通了-但它能够工作,看起来像PHP为该数组创建了一个变量(或类似的东西,实际上并不重要)-这意味着这并不会造成性能问题。但是,为什么不使用匿名数组和foreach循环?(这在某种程度上“看起来不对/不好”)

不是回答你的问题,但这段代码也让我感到困扰 :P。我会使用array-map (http://php.net/manual/en/function.array-map.php)来避免这种情况 :P - Nanne
我认为在foreach中使用匿名数组的最佳示例是:foreach(range('a', 'z') as $char) {} - ComFreek
1
PHP为该数组创建一个变量(或类似的东西,这并不重要)- 如果您将其存储在命名数组中,也会创建一个变量。 - Eric
2个回答

6

我认为这是可以使用的。

无论您使用直接初始化数组还是将数组变量用作foreach的参数,都是有效的参数,并且没有理由认为匿名数组会有不同的处理方式。

从代码维护的角度来看,这里正在做什么也非常清晰,因此也没有可读性问题。


5
避免使用临时数组变量还可以减少变量作用域的污染。虽然这只是一个小点,但也是一个不错的附带效果。 - Pekka

3

这是一个完全正常的数组,应该可以工作。

您使用的术语很奇怪,“匿名”一词对于函数来说是有意义的,因为它们通常具有名称,但对于数组来说呢?如果您没有直接将整数分配给变量,那么它是否是匿名的? :) 不是的...


1
是的,我意识到命名问题,但是想不出更好(合适)的形容词。有什么建议吗? - Niko
我的观点是:不需要形容词,因为没有特别的事情发生。真的。想想看。这就像$x=1; $y=2; $z=$x+$y$z=1+2之间的区别。你不会想知道为什么可以直接写2而不将其分配给一个变量。或者foreach (functionreturninganarray() as $foo)... - Karoly Horvath
这正是我的问题所在 - 是否有任何区别。没有看得那么清楚,谢谢你指出来! - Niko
1
我理解@Niko使用“anonymous”的意思。 “literal array”是否更合适? - Nicolas Le Thierry d'Ennequin
1
记录一下 - 实际上我谷歌搜索了“PHP匿名数组”,寻找关于没有名称的数组的信息(正如OP所问)。因此,尽管术语可能对某些人来说很奇怪,但它确实有点合理。 - Alex Mulchinock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接