Нет ошибки.
Вы использовали одну и ту же переменную в обоих циклах, но в первый раз вы делали это по ссылке и не сбрасывали ее после цикла. Это означает, что при следующем изменении переменной вы изменяете исходный массив.
Сбрасывается после использования по ссылке.
$label_list = explode(',', '111, 222, 333');
foreach($label_list as &$label_item) {
$label_item = trim(mb_strtolower($label_item));
}
unset($label_item); // unset the by reference variable
var_dump($label_list); // source list
foreach ($label_list as $label_item) {
var_dump($label_list); //? wtf list
}
Выходы:
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}
https://3v4l.org/MjlcU
Если вы посмотрите на свой собственный вывод, вы увидите &
на последнем элементе.
Это означает, что это по ссылке.