Массив реструктуризации на основе отношения родителя / ребенка

У меня есть следующая структура массива:

Array ( [0] => Array ( [id] => 83 [parent_id] => 0 [title] => Questionnaire one ) [1] => Array ( [id] => 84 [parent_id] => 0 [title] => Questionnaire two ) [2] => Array ( [id] => 85 [parent_id] => 83 [title] => Questionnaire three ) ) 

Я хочу переструктурировать массив, поэтому дочерние элементы перечислены под родителями. Например:

 Array ( [0] => Array ( [id] => 83 [parent_id] => 0 [title] => Questionnaire one ) [1] => Array ( [id] => 85 [parent_id] => 83 [title] => Questionnaire three ) [2] => Array ( [id] => 84 [parent_id] => 0 [title] => Questionnaire two ) ) 

Я искал предыдущие вопросы, но не обнаружил, что никто из них фактически не достиг выше.

Может кто-нибудь, пожалуйста, помогите мне с этим?

благодаря

Можешь попробовать

 $array = Array( "0" => Array("id" => 83,"parent_id" => 0,"title" => "Questionnaire one"), "1" => Array("id" => 84,"parent_id" => 0,"title" => "Questionnaire two"), "2" => Array("id" => 85,"parent_id" => 83,"title" => "Questionnaire three")); $id = array_map(function ($item) {return $item["id"];}, $array); $parent = array_filter($array, function ($item){return $item['parent_id'] == 0;}); $lists = array(); foreach ($parent as $value) { $lists[] = $value ; $children = array_filter($array, function ($item) use($value) {return $item['parent_id'] == $value['id'];}); foreach($children as $kids) { $lists[] = $kids ; } } echo "<pre>"; print_r($lists); 

Вывод

 Array ( [0] => Array ( [id] => 83 [parent_id] => 0 [title] => Questionnaire one ) [1] => Array ( [id] => 85 [parent_id] => 83 [title] => Questionnaire three ) [2] => Array ( [id] => 84 [parent_id] => 0 [title] => Questionnaire two ) ) 

Вы можете использовать uksort () . Это ДЕМО .

 function cmp($a, $b) { if ($stock[$a] != $stock[$b]) return $stock[$b] - $stock[$a]; return strcmp($a, $b); } $a = array(5 => 'apple', 1 => 'banana', 6 => 'orange', 2 => 'kiwi'); uksort($a, "cmp"); foreach ($a as $key => $value) { echo "$key: $value\n"; }