#php #laravel #laravel-collection
Вопрос:
Я хочу преобразовать все мои статические данные в сбор в Laravel.
Это мои данные:
static $menu_list = [
[
'path' => 'admin/report/transaction',
'active' => 'admin/report',
'name' => 'Report',
'icon' => 'file-text',
'children' => [
'path' => 'admin/report/transaction',
'active' => 'admin/report/transaction',
'name' => 'Transaction',
],
],
];
Эта функция преобразует мои данные в массив:
public static function menuList()
{
$menu_list = collect(self::$menu_list)->map(function ($voucher) {
return (object) $voucher;
});
}
но функция выше может преобразовывать только основную часть массива, она не может преобразовываться children => [...]
в коллекцию.
Ответ №1:
Вам нужен рекурсивный вызов.
public static function convertToCollection()
{
$menu_list = self::menuList(self::$menu_list);
}
public static function menuList($list)
{
return collect($list)->map(function ($voucher) {
if(is_array($voucher)) {
return self::menuList($voucher)
}
return $voucher;
});
}
Ответ №2:
Вам нужно снова использовать collect()
внутри map()
:
public static function menuList()
{
$menu_list = collect(self::$menu_list)->map(function ($voucher) {
return (object) array_merge($voucher, [
'children' => collect($voucher['children'])
]);
});
}
Комментарии:
1. он возвращает ошибку При попытке получить свойство «дети» не-объекта в строке «дети» = > собрать($ваучер->>дети)
2. О, извини, я все исправил.
Ответ №3:
Просто добавьте небольшой кодовый мир в свой подход.
$menu_list = collect(self::$menu_list)->map(function ($voucher) {
$voucher['children'] = (object) $voucher['children'];
return (object) $voucher;
});
Выход
IlluminateSupportCollection {#574 ▼
#items: array:1 [▼
0 => {#573 ▼
"path": "admin/report/transaction"
"active": "admin/report"
"name": "Report"
"icon": "file-text"
"children": {#567 ▼
"path": "admin/report/transaction"
"active": "admin/report/transaction"
"name": "Transaction"
}
}
]
}
Комментарии:
1. Это именно то, что сделал владелец потока.
2. но он хочет
children
быть объектом. Разве это не происходит из моего кода @shaedrich ?3. он говорит
it can't convert children => [...] to collection.
. Так что мой ответ работает так, как он хотел.4. Нет, они хотят
path
,active
,name
иicon
быть объектом, насколько я могу видеть. И даже если бы вы были правы, для этого не требовался бы ответ, но комментарий о том, что владелец потока все делает правильно.5. его кодовая база dosent делает детей объектом