У меня есть $array1
. Затем я создаю $array2
по array_filter
из $array1
. Когда я просто перебираю более $array2
(пустой цикл), как-то создается дубликат элемента, и он заменяет существующий элемент.Пустой foreach на одном массиве изменяет другой массив
Вот пример:
<?
$array2 = array_filter($array1, function ($elem) use ($idsToExclude) {
return in_array($elem["id"], $idsToExclude);
});
?>
<?
echo "== before iterating ==<br>";
print_r($array1);
?>
<? foreach ($array2 as $elem) :?>
<!-- WRYYYYYYY! -->
<? endforeach;?>
<?
echo "== after iterating ==<br>";
print_r($array1);
?>
И выход:
== before ==
17 => Array (
id => 1
name => Test account 1
)
18 => Array (
id => 102
name => Test account 2
)
19 => Array (
id => 37
name => Test account 3
)
20 => Array (
id => 82
name => Test account 4
)
21 => Array (
id => 97
name => Test account 5
)
== after ==
17 => Array (
id => 1
name => Test account 1
)
18 => Array (
id => 97
name => Test account 5
)
19 => Array (
id => 37
name => Test account 3
)
20 => Array (
id => 82
name => Test account 4
)
21 => Array (
id => 97
name => Test account 5
)
Обратите внимание, что во втором выходе Test account 5
заменить Test account 2
. Если комментарий foreach
прокомментирован, $array1
не изменяются.
Это не очень читаемым. Можете ли вы вывести вывод 'print_r()' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –
Ваша проблема не может быть воспроизведена: http://ideone.com/LR0W0x. Однако вы должны иметь в виду примечания и предупреждения отсюда: http://www.php.net/manual/en/control-structures.foreach.php. – hindmost
Я придумал те же результаты, что и задние. [Codepad.viper-7.com/sgcv1U](http://codepad.viper-7.com/sgcv1U). Не удалось воспроизвести. –