mysql — изменить исходные значения массива внутри foreach Переполнение стека

Я хочу обновить массив внутри foreach Я попробовал этот два кода:

код 1:

 foreach ($listOrders as $k => $order) {

foreach ($listOrders as $key => $o)
{
if ($o["id_order"] == $order["id_order"])
{
unset($listOrders[$key]);
}
}

в этом codeunset не работает

код 2:

     foreach ($listOrders as $k => &$order) {

foreach ($listOrders as $key => $o)
{
if ($o["id_order"] == $order["id_order"])
{
unset($listOrders[$key]);
}
}

Если я использую & с $ order $ listOrders не вернет все данные, которые я хочу.

0

Решение

Ваша ошибка должна быть здесь

  foreach ($listOrders as $k => &$order) {
^

Удалить &

Кроме того, вы дважды перебираете свой $ listOrders с вашим кодом, не будет ли ваш список массивов всегда пустым после завершения итерации?

0

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

Если вы просто пытаетесь получить список заказов в списке, вы можете использовать array_column() индексировать список id_order, Поскольку вы можете иметь только 1 запись в массиве с определенным ключом, это закончится последней записью с определенным идентификатором заказа в массиве …

$uniqueList = array_column(listOrders, null, "id_order");

Если вам просто нужен список без индекса, вы можете использовать array_values() переиндексировать список.

$uniqueList = array_values(array_column(listOrders, null, "id_order"));
0