$array_base = array(
array('id'=>0,'pid'=>0),
array('id'=>1,'pid'=>0),
array('id'=>2,'pid'=>0),
array('id'=>3,'pid'=>1),
array('id'=>4,'pid'=>1),
array('id'=>5,'pid'=>3),
array('id'=>6,'pid'=>9),
array('id'=>7,'pid'=>5),
array('id'=>8,'pid'=>7),
array('id'=>9,'pid'=>0),
);
foreach ($array_base as $k => $v){
$id_arr[$k] = $v['id'];
}
foreach ($array_base as $k2 => &$v2){
if($v2['id'] == $v2['pid']) continue;
$tmp_key =array_search($v2['pid'],$id_arr);
if(!$tmp_key && $v2['pid']!=0) continue;
$array_base[$tmp_key]['child'][] = &$v2;
}
foreach ($array_base as $k3 => $v3){
if($v3['id']!=0){
$array_base[$k3];
unset($array_base[$k3]);
}
}
echo '<pre>';
print_r($array_base);
echo '</pre>';