任何想法
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'
)
我感兴趣的部分是,
为什么第二个数组修改会影响第一个数组的最后一项?
答案 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