php ::数组引用

时间:2010-10-04 00:47:38

标签: php arrays pass-by-reference

任何想法

foreach ($groups as &$group)
  $group = trim(str_replace(',', '', $group));

echo '<pre>';
print_r($groups);
echo '</pre>';

$groupsq = $groups;
foreach ($groupsq as &$group)
  $group = '\'' . $group . '\'';

echo '<pre>';
print_r($groups);
echo '</pre>';

产量

Array
(
    [0] => Fake group
    [1] => another group
    [2] => non-existent
)
Array
(
    [0] => Fake group
    [1] => another group
    [2] => 'non-existent'
)

我感兴趣的部分是,

为什么第二个数组修改会影响第一个数组的最后一项?

2 个答案:

答案 0 :(得分:1)

首先,您需要使用unset()在每个foreach循环后清理引用,如下所示:

foreach ($groups as &$group)
  $group = trim(str_replace(',', '', $group));

unset($group);

// ...

foreach ($groupsq as &$group)
  $group = '\'' . $group . '\'';

unset($group);

其次,您正在打印$groups而不是$groupsq

echo '<pre>';
print_r($groups);
echo '</pre>';

正在修改$groups的最后一项,因为在第一个foreach循环后你没有清理引用。

答案 1 :(得分:1)

这是一篇深入的文章,解释了此行为背后的技术细节:http://schlueters.de/blog/archives/141-References-and-foreach.html