Рефакторинг объектов с использованием Laravel Collections не удался

То, что я пытаюсь сделать, это то, что мне нужно вернуть массив с парами ключ-значение из массива объектов.

Из API я получаю объекты, которые выглядят примерно так.

array:8 [▼
0 => TargetingSearch {#229 ▼
#data: array:6 [▼
"id" => "6005609368513""name" => "Software""audience_size" => 565991450
"path" => array:4 [▶]
"description" => """topic" => "Technology"]
#_type_checker: TypeChecker {#228 ▶}
}

Простой способ сделать это — циклически перемещаться по объектам и помещать значения в массив.

  $codes = [];
foreach($objects as $object) {
$codes[] = [
'id' => $object->id,
'name' => $object->name,
];
}

Который вернет это именно то, что мне нужно.

['id' => 321, 'name' => "item1"],
['id' => 321, 'name' => "item1"],
['id' => 321, 'name' => "item1"],

Я думаю, что это немного сложно, и то, что я пытаюсь сделать, это что-то более читабельное.

Например, используя классы коллекции Laravel, я мог бы сделать что-то вроде этого.

$codes = collect($objects)->pluck('id', 'name')->toArray();

Проблема здесь в том, что это не возвращает ключи.

["item1" => "123"],
["item2" => "321"],
["item3" => "213"],

Если я использую

$codes = collect($objects)->only('id', 'name')->toArray();

Он возвращает пустой массив, потому что сам объект все испортил.

кто-нибудь знает как это решить?

0

Решение

Вы можете использовать метод «карта»

collect($objects)->map(function ($item) {
return [
'id'   => $item->id,
'name' => $item->name
];
});
1

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

Других решений пока нет …