Мне нужно создать этот объект из PHP массива и разобрать его в JSON в Vue объект.
Vue объект:
options: [
{
language: 'Javascript',
libs: [
{ name: 'Vue.js', category: 'Front-end' },
{ name: 'Adonis', category: 'Backend' }
]
},
{
language: 'Ruby',
libs: [
{ name: 'Rails', category: 'Backend' },
{ name: 'Sinatra', category: 'Backend' }
]
},
{
language: 'Other',
libs: [
{ name: 'Laravel', category: 'Backend' },
{ name: 'Phoenix', category: 'Backend' }
]
}
]
Например, в php у меня есть следующий массив:
$testArray = [
13 => [
'language' => 'languageTest',
'libs' => [30 => ['name' => 'nameTest', 'id' => '30'],
31 => ['name' => 'nameTest', 'id' => '31'],
32 => ['name' => 'nameTest', 'id' => '32'],
]
],
14 => [
'language' => 'languageTest',
'libs' => [30 => ['name' => 'nameTest', 'id' => '30'],
31 => ['name' => 'nameTest', 'id' => '31'],
32 => ['name' => 'nameTest', 'id' => '32'],
]
]
];
Если я передам это "json", я получу следующий результат.
{"13":{"language":"languageTest","libs":{"30":{"name":"nameTest","id":"30"},"31":{"name":"nameTest","id":"31"},"32":{"name":"nameTest","id":"32"}}},"14":{"language":"languageTest","libs":{"30":{"name":"nameTest","id":"30"},"31":{"name":"nameTest","id":"31"},"32":{"name":"nameTest","id":"32"}}}}
Это дает мне следующую ошибку в Vue компонент: https://vue-multiselect.js.org/#sub -option-groups
Недопустимый проп: проверка типа завершилась неудачно для опций пропа. Ожидаемый массив, есть объект.
Как создать массив из PHP, но при передаче в JSON это правильно для компонента Vue?
ОБНОВЛЕНИЕ: Я рекурсивно создаю этот массив, присваивая значения.
private function getChildCategoryTree($category, $level = 1, $maxLevel = 2)
{
$arrayTreeCategory = [];
if ($category->hasChildren()) {
$childCategories = $this->getSubcategories($category);
if (count($childCategories) > 0) {
foreach ($childCategories as $childCategory) {
if ($childCategory->hasChildren() && $level < $maxLevel && $childCategory->getId() != 14) {
if ($this->categoryCanShow($childCategory)) {
$subLevel = $level + 1;
$arrayTreeCategory[$childCategory->getId()]['language'] = $childCategory->getName();
$arrayTreeCategory[$childCategory->getId()]['libs'] = $this->getChildCategoryTree($childCategory, $subLevel);
}
} else {
if ($this->categoryCanShow($childCategory)) {
if ($level == 1) {
$arrayTreeCategory[99]['language'] = 'other';
$arrayTreeCategory[99]['libs'] = ['name' => $childCategory->getName(), 'id' => $childCategory->getId()];
} else {
$arrayTreeCategory[$childCategory->getId()] = ['name' => $childCategory->getName(), 'id' => $childCategory->getId()];
}
}
}
}
}
}
return $arrayTreeCategory;
}