PHP foreach в подмассиве, влияющий на другой элемент родительского массива

У меня есть этот массив (печать из точки [A] в коде ниже):

Array
(
[codigo] =>
[titulo] => Array
(
[0] => musi
[1] => bach
)
[titulo_operador] => OR
[resumo] =>
[autor] =>
[ano_min] =>
[ano_max] =>
[tipo] =>
[categoria] =>
[palavra_chave] =>
[idioma] =>
)

в котором я выполняю эти операции … (код намеренно не оптимизирован, он может быть меньше)

if (!empty($data['titulo'])) {
if (is_array($data['titulo'])) {
$query .= " AND (";
//print_r($data); point [A]
foreach ($data['titulo'] as $value) {
$query_temp .= " ".$data['titulo_operador']." aid.name LIKE '%".$value."%'";
}
//print_r($data); point [B]
$query_temp = trim($query_temp, " ".$data['titulo_operador']." ");
$query .= $query_temp;
unset($query_temp);
$query .= ")";
} elseif (is_string($data['titulo'])) {
$query .= " AND aid.name LIKE '%".$data['titulo']."%'";
}
}

После foreach $ data [‘idioma’] устанавливается в значение ‘bach’. Это print_r в точке [B]:

Array
(
[codigo] =>
[titulo] => Array
(
[0] => musi
[1] => bach
)
[titulo_operador] => OR
[resumo] =>
[autor] =>
[ano_min] =>
[ano_max] =>
[tipo] =>
[categoria] =>
[palavra_chave] =>
[idioma] => bach
)

Я удалил оператор $ query_temp, оставив там пустой foreach, и это все еще происходит, так что я почти уверен, что там есть что-то в foreach … Изменяет ли foreach в подмассиве что-либо и в массиве parrent?

Редактировать: я назначил другие элементы в $ data [‘titulo’], а $ data [‘idioma’] всегда получает значение последнего элемента.

1

Решение

Нашел решение при попытке повторить проблему на eval, благодаря совету Джона Стерлинга. Проблема была не в этом блоке кода. Этот блок, который был запущен сразу после создания массива, вызывал проблему:

foreach ($data as $key => &$value) {
$data[$key] = conferir($data[$key]);
}

Удаление этой ссылки в этом выражении foreach предотвратило это странное поведение в другом foreach:

foreach ($data as $key => $value) {
$data[$key] = conferir($data[$key]);
}

Еще раз спасибо, Джон Стерлинг, за то, что указал мне на 3v4l. Копирование моего кода заставило меня найти проблему.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]