То, что я пытаюсь сделать, это то, что мне нужно вернуть массив с парами ключ-значение из массива объектов.
Из 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();
Он возвращает пустой массив, потому что сам объект все испортил.
кто-нибудь знает как это решить?
Вы можете использовать метод «карта»
collect($objects)->map(function ($item) {
return [
'id' => $item->id,
'name' => $item->name
];
});
Других решений пока нет …