Ну, у класса Collection есть много полезных методов для игры. Вы можете проверить полный список в документации .
Добавление элемента в коллекцию
Чтобы добавить элемент в свою коллекцию, вы можете использовать метод push()
. Из документов:
Метод push добавляет элемент в конец коллекции:
$collection = collect([1, 2, 3, 4]);
$collection->push(5);
$collection->all();
// [1, 2, 3, 4, 5]
В вашем случае:
// your actual collection
$result = /** here you get your json */;
$collection = collect(json_decode($result, true));
// the new element
$new = ['id' => 23, 'name' => 'the latest one!', 'price' => 1200];
//adding it to the collection
$collection->push($new);
Обновление элемента коллекции
Для этого у вас есть несколько путей ... один, который приходит мне в голову, - это создать новую коллекцию, отображающую новые значения в элементе, который соответствует вашему условию. Из документов :
Метод map выполняет итерацию по коллекции и передает каждое значение
на данный обратный звонок. Обратный звонок свободен, чтобы изменить элемент и
вернуть его, таким образом формируя новую коллекцию измененных предметов:
$collection = collect([1, 2, 3, 4, 5]);
$multiplied = $collection->map(function ($item, $key) {
return $item * 2;
});
$multiplied->all();
// [2, 4, 6, 8, 10]
Так в вашем случае:
$result = /** here you get your json */;
$collection = collect(json_decode($result, true));
// parameters to search and update
$id = 1 // the element id to find
$data = ['the', 'data', 'to', 'update'];
// updating the collection
$collection = $collection->map(function ($element) use ($id, $data) {
if ($element['id'])
$element = $data; // here goes your update logic
return $element;
});
Удаление элемента коллекции
Для удаления элемента коллекции вы можете использовать метод pull()
. Из документов:
метод pull он удаляет и возвращает элемент из коллекции
ключ:
$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);
$collection->pull('name');
// 'Desk'
$collection->all();
// ['product_id' => 'prod-100']
Таким образом, чтобы удалить элемент массива, мы сначала найдем элемент с search()
, который возвращает ключ удаляемого элемента, а затем мы используем предыдущий упомянутый метод: pull()
$result = /** here you get your json */;
$collection = collect(json_decode($result, true));
// element to be deleted
$id = 1;
$key = $collection->search(function($element) use ($id) {
return $element['id'] == $id;
});
$collection->pull($key);