<?php
function make_recursive($arr, $root = 0, $pid = 'pid', $id = 'id', $child = 'child') {
$m = array();
foreach ($arr as $e) {
if (!isset($m[$e[$pid]])) $m[$e[$pid]] = array();
if (!isset($m[$e[$id]])) $m[$e[$id]] = array();
$m[$e[$pid]][] = array_merge($e, array($child => &$m[$e[$id]]));
}
return $m[$root][0];
}
$arr = array(
array('id' => 5273, 'pid' => 0, 'name' => 'John Doe'),
array('id' => 6032, 'pid' => 5273, 'name' => 'Sally Smith'),
array('id' => 6034, 'pid' => 6032, 'name' => 'Mike Jones'),
array('id' => 6035, 'pid' => 6034, 'name' => 'Jason Williams'),
array('id' => 6036, 'pid' => 5273, 'name' => 'Sara Johnson'),
array('id' => 6037, 'pid' => 5273, 'name' => 'Dave Wilson'),
array('id' => 6038, 'pid' => 6037, 'name' => 'Amy Martin'),
);
$re=make_recursive($arr);
var_export($re);
preferences:
28.17 ms | 402 KiB | 5 Q