3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php $categories = array( array( 'parent_id' => 0, 'categories_id' => 1, ), array( 'parent_id' => 0, 'categories_id' => 2, ), array( 'parent_id' => 1, 'categories_id' => 11, ), array( 'parent_id' => 1, 'categories_id' => 111, ), array( 'parent_id' => 2, 'categories_id' => 22, ), ); $tree = array(); foreach ($categories as $category) { $tree = &build($category, $tree); } // var_export($tree); function &build($category, &$tree = array()) { if ($category['parent_id'] == 0) { $category = array( $category['categories_id'] => $category, ); $tree = array_merge($tree, $category); return $tree; } foreach ($tree as $cate_id => $cate) { var_dump($tree); if ($category['parent_id'] == $cate_id) { $tree[$cate_id]['childs'] = $category; } if (is_array($cate)) { return build($cate, $tree); } } return $tree; }
based on QdVCu
Output for 5.6.30, hhvm-3.18.5 - 3.22.0, 7.0.30 - 7.3.0beta1
array(2) { [0]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } [1]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(2) } } array(3) { [0]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } [1]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(2) } [2]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } } array(4) { [0]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } [1]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(2) } [2]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } [3]=> array(2) { ["parent_id"]=> int(0) ["categories_id"]=> int(1) } }