php :: Array ссылки - PullRequest
       10

php :: Array ссылки

1 голос
/ 04 октября 2010

любая идея, почему

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

echo '<pre>';
print_r($groups);
echo '
'; $ groupsq = $ groups; foreach ($ groupsq as & $ group) $ group = '\' '. $ группа. '\' '; echo '
';
print_r($groups);
echo '
';

Урожайность

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

Интересующая меня часть:

Почему вторая модификация массива влияет на последний элемент в первом массиве?

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Вот углубленная статья, объясняющая технические детали, лежащие в основе этого поведения:

1 голос
/ 04 октября 2010

Во-первых, вам нужно очистить ссылки после каждого цикла foreach, используя unset(), например так:

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

unset($group);

// ...

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

unset($group);

Во-вторых, вы печатаете $groups вместо $groupsq:

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

Последний элемент $groups изменяется, поскольку вы не очистили ссылку после первого цикла foreach.

...