PHP foreach循环中的变量意义是什么?

3
我想使用foreach循环遍历数组列表并向每个数组添加一个元素。
$tom = array('aa','bb','cc');
$sally = array('xx','yy','zz');

$myArrays = array('tom','sally');

 foreach($myArrays as $arrayName) {
     ${$arrayName}[] = 'newElement';
 }

使用${$arrayName}[]是否是最好的方法?除了使用花括号,是否还有其他选项?目前这种方法能够正常工作,但我想知道是否有更好的选择。

谢谢

5个回答

9

使用引用。

$myArrays = array(&$tom, &$sally);

foreach($myArrays as &$arr) {
  $arr[] = 'newElement';
}

foreach ($myArrays as $i => $arr) { $myArrays[$i][] = "foo"; } - Adrian
1
如果仍然是存储在$myArrays中的引用,那么$myArrays[$i]将是$tom$sally的副本而不是原始对象。从技术上讲,它将保留原始对象,直到它们被更改,此时PHP将复制它们。 - Tesserex

5

如果你坚持使用那种结构,我会建议你继续保持。但是加上注释可能更好。

如果可以重新排列,为什么不嵌套它们呢?

$tom = array('aa','bb','cc');
$sally = array('xx','yy','zz');

$myArrays = array(&$tom, &$sally); // store the actual arrays, not names

// note the & for reference, this lets you modify the original array inside the loop
foreach($myArrays as &$array) {
    $array[] = 'newElement';
}

0

不需要花括号。

$$arrayName[]

原始代码可能是PHP中的一个bug?

虽然我想知道为什么你会需要这样做...


1
实际上,对于数组,需要使用花括号。你可以自己测试一下。 - Adrian

0

有些人会因为你使用变量变量而责骂你。你可以像这样做:

$tom = array('aa','bb','cc');
$sally = array('xx','yy','zz');

$myArrays = array(&$tom, &$sally);

for($i=0; $i<sizeof($myArrays); ++$i) {
    $myArrays[$i][] = 'newElement';
}

1
使用常规的 for 循环而不是 foreach 看起来没有必要,反而会令人困惑。 - Tesserex

0

没有尝试过,但应该也可以工作:

$tom = array('aa','bb','cc');
$sally = array('xx','yy','zz');

$myArrays = array('tom','sally');

foreach($myArrays as $key => $value) {
    $$value[] = 'newElement';
}

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