Элемент обновления Laravel collect () при зацикливании - PullRequest
0 голосов
/ 26 марта 2019

Я объявил переменную типа данных collect (). Я хочу перебрать его и обновить конкретный столбец в каждой строке.

Пример кода:

    $a = collect([['one' => 1, 'two' => 2], ['one' => 3, 'two' => 4], ['one' => 5, 'two' => 6]]);

    foreach ($a as $b) {
        $b['one'] = 0;
    }

    dd($a);

Я не понимаю, почему результат таков:

    Collection {#510 ▼
      #items: array:3 [▼
        0 => array:2 [▼
          "one" => 1
          "two" => 2
        ]
        1 => array:2 [▼
          "one" => 3
          "two" => 4
        ]
        2 => array:2 [▼
          "one" => 5
          "two" => 6
        ]
      ]
    }

Я ожидаю "one" => 0 в качестве результата для каждой строки.

1 Ответ

1 голос
/ 26 марта 2019

Вы не изменяете исходный массив, нет места, где вы можете сохранить измененный элемент обратно в массив. Для этой цели лучше использовать функцию map в самой коллекции.

$a = collect([['one' => 1, 'two' => 2], ['one' => 3, 'two' => 4], ['one' => 5, 'two' => 6]]);

$a = $a->map(function($item) { 
    $item['one'] = 0; 
    return $item; 
});

Для каждого пути:

foreach ($a as $key => $b) {
   $b['one'] = 0;
   $a[$key] = $b; // override the original item.
}
...