Sometimes we need to go through an array and group the indexes so that it is easier and easier to extract them in the iteration.<?php$people = [ ['id' => 1, 'name' => 'Hayley'], ['id' => 2, 'name' => 'Jack', 'dad' => 1], ['id' => 3, 'name' => 'Linus', 'dad'=> 4], ['id' => 4, 'name' => 'Peter' ], ['id' => 5, 'name' => 'Tom', 'dad' => 4],];$family = array_reduce($people, function($accumulator, $item) { if (!isset($item['dad'])) { $id = $item['id']; $name = $item['name']; $children = $accumulator[$id]['children'] ?? []; $accumulator[$id] = ['id' => $id, 'name' => $name,'children' => $children]; return $accumulator; } $dad = $item['dad']; if (!isset($accumulator[$dad])) { $accumulator[$dad] = ['children' => [$item]]; return $accumulator; } $accumulator[$dad]['children'][] = $item; return $accumulator;}, []);var_export(array_values($family));?>OUTPUTarray ( 0 => array ( 'id' => 1, 'name' => 'Hayley', 'children' => array ( 0 => array ( 'id' => 2, 'name' => 'Jack', 'dad' => 1, ), ), ), 1 => array ( 'id' => 4, 'name' => 'Peter', 'children' => array ( 0 => array ( 'id' => 3, 'name' => 'Linus', 'dad' => 4, ), 1 => array ( 'id' => 5, 'name' => 'Tom', 'dad' => 4, ), ), ),)<?php$array = [ [ "menu_id" => "1", "menu_name" => "Clients", "submenu_name" => "Add", "submenu_link" => "clients/add" ], [ "menu_id" => "1", "menu_name" => "Clients", "submenu_name" => "List", "submenu_link" => "clients" ], [ "menu_id" => "2", "menu_name" => "Products", "submenu_name" => "List", "submenu_link" => "products" ],];$menu = array_reduce($array, function($accumulator, $item){ $index = $item['menu_name']; if (!isset($accumulator[$index])) { $accumulator[$index] = [ 'menu_id' => $item['menu_id'], 'menu_name' => $item['menu_name'], 'submenu' => [] ]; } $accumulator[$index]['submenu'][] = [ 'submenu_name' => $item['submenu_name'], 'submenu_link' => $item['submenu_link'] ]; return $accumulator;}, []);var_export(array_values($menu));?>OUTPUTarray ( 0 => array ( 'menu_id' => '1', 'menu_name' => 'Clients', 'submenu' => array ( 0 => array ( 'submenu_name' => 'Add', 'submenu_link' => 'clients/add', ), 1 => array ( 'submenu_name' => 'List', 'submenu_link' => 'clients', ), ), ), 1 => array ( 'menu_id' => '2', 'menu_name' => 'Products', 'submenu' => array ( 0 => array ( 'submenu_name' => 'List', 'submenu_link' => 'products', ), ), ),)