Я новичок в этом.
Я изучаю ZF2, где мне нужно сформировать вложенный многомерный массив из значений базы данных. Моя таблица базы данных:
+-------------+----------------+---------------------+--------+ | category_id | name | parent_category_ids | status | +-------------+----------------+---------------------+--------+ | 1 | New Category | 1 | 1 | | 3 | ddd | 1 | 1 | | 4 | test1 | 3 | 0 | | 5 | Test123 recipe | 3 | 1 | | 6 | abceg | 3 | 1 | | 7 | xyz | 6 | 1 | +-------------+----------------+---------------------+--------+
результирующий массив должен выглядеть следующим образом:
Array ( [1] => Array ( [id] => 3 [name] => ddd [sub] => Array ( [0] => Array ( [id] => 4 [name] => test1 [sub] => None ) [1] => Array ( [id] => 5 [name] => Test123 recipe [sub] => None ) [2] => Array ( [id] => 6 [name] => abceg [sub] => Array ( [0] => Array ( [id] => 7 [name] => xyz [sub] => 6 ) ) ) ) ) )
Я пробовал этот код до сих пор, но никакого положительного результата
> foreach ($categoryList as $key => $value) { > if ($value->getCategoryId()!=1) { > $category[$key]['id'] = $value->getCategoryId(); > $category[$key]['name'] = $value->getName(); > $category[$key]['sub'] = $this->createSubCategoryArray($value->getCategoryId(), $categoryList); > } > } > public function createSubCategoryArray($parentCatId, $categoryList) > { > foreach ($categoryList as $key => $category) { > if($category->getCategoryId() == $parentCatId && $category->getCategoryId()!=1){ > return array( > 'id' => $category->getCategoryId(), > 'name' => $category->getName(), > 'sub' => $this->createSubCategoryArray($category->getCategoryId(), > $categoryList) > ); > } > } > }
Вы можете отменить свой результат и собрать массив
// ordered by parent $src = array( ['cid'=>'1','name'=>'Rootcat','parent'=>'1'], ['cid'=>'3','name'=>'dddd','parent'=>'1'], ['cid'=>'4','name'=>'test1','parent'=>'3'], ['cid'=>'5','name'=>'Test123 rec','parent'=>'3'], ['cid'=>'6','name'=>'abceg','parent'=>'3'], ['cid'=>'7','name'=>'JHGSGF','parent'=>'5'], ); // inverse array, better take it sorted by parent_id desc $data = array_reverse($src,false); $for_parent = []; $result = []; foreach($data as $rec) { if (isset($for_parent[$rec['cid']])) { $rec['sub'] = $for_parent[$rec['cid']]; unset($for_parent[$rec['cid']]); } $for_parent[$rec['parent']] []= $rec; } print_r($for_parent);
с// ordered by parent $src = array( ['cid'=>'1','name'=>'Rootcat','parent'=>'1'], ['cid'=>'3','name'=>'dddd','parent'=>'1'], ['cid'=>'4','name'=>'test1','parent'=>'3'], ['cid'=>'5','name'=>'Test123 rec','parent'=>'3'], ['cid'=>'6','name'=>'abceg','parent'=>'3'], ['cid'=>'7','name'=>'JHGSGF','parent'=>'5'], ); // inverse array, better take it sorted by parent_id desc $data = array_reverse($src,false); $for_parent = []; $result = []; foreach($data as $rec) { if (isset($for_parent[$rec['cid']])) { $rec['sub'] = $for_parent[$rec['cid']]; unset($for_parent[$rec['cid']]); } $for_parent[$rec['parent']] []= $rec; } print_r($for_parent);
Пример результата:
Array ( [1] => Array ( [0] => Array ( [cid] => 1 [name] => Rootcat [parent] => 1 [sub] => Array ( [0] => Array ( [cid] => 3 [name] => dddd [parent] => 1 [sub] => Array ( [0] => Array ( [cid] => 6 [name] => abceg [parent] => 3 ) [1] => Array ( [cid] => 5 [name] => Test123 rec [parent] => 3 [sub] => Array ( [0] => Array ( [cid] => 7 [name] => JHGSGF [parent] => 5 ) ) ) [2] => Array ( [cid] => 4 [name] => test1 [parent] => 3 ) ) ) ) ) ) )