Изменить исходные значения массива внутри foreach php

Я хочу обновить массив внутри 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 не вернет все данные, которые я хочу.

2 ответа

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

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

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

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

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

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

Удалить &

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

Другие вопросы по тегам