изменить исходные значения массива внутри foreach php - PullRequest
0 голосов
/ 08 октября 2018

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

код 1:

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

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

в этом наборе кодов не работает

код 2:

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

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

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

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

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

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

$uniqueList = array_values(array_column(listOrders, null, "id_order"));
0 голосов
/ 08 октября 2018

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

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

Удалить &

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

...