3v4l.org

run code in 500+ PHP versions simultaneously
<?php $arr[] = ["id" => 1, "name" => "Electronics", "parent_id" => 0]; $arr[] = ["id" => 2, "name" => "Mobile", "parent_id" => 1]; $arr[] = ["id" => 3, "name" => "Iphone", "parent_id" => 2]; $arr[] = ["id" => 4, "name" => "Men", "parent_id" => 0]; $arr[] = ["id" => 5, "name" => "Shirt", "parent_id" => 4]; function addToArr(&$arr, $data) { if ($data["parent_id"] == 0) return $arr[] = ["id" => $data["id"], "name" => $data["name"], "children"=> []]; foreach($arr as &$e) { if ($e["id"] == $data["parent_id"]) { $e["children"][] = ["id" => $data["id"], "name" => $data["name"], "children"=> []]; break; } addToArr($e["children"], $data); } } $res = []; foreach($arr as $e) addToArr($res, $e); print_r($res);
Output for 7.1.25 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.34, 8.3.0 - 8.3.35, 8.4.1 - 8.4.26, 8.5.0 - 8.5.11
Array ( [0] => Array ( [id] => 1 [name] => Electronics [children] => Array ( [0] => Array ( [id] => 2 [name] => Mobile [children] => Array ( [0] => Array ( [id] => 3 [name] => Iphone [children] => Array ( ) ) ) ) ) ) [1] => Array ( [id] => 4 [name] => Men [children] => Array ( [0] => Array ( [id] => 5 [name] => Shirt [children] => Array ( ) ) ) ) )

preferences:
37.86 ms | 1141 KiB | 7 Q