<?php
$a = [
1=>[
'id'=>1,
'parent'=>0
],
2=>[
'id'=>2,
'parent'=>1
],
3=>[
'id'=>3,
'parent'=>2
],
4=>[
'id'=>4,
'parent'=>1
]
];
function parentList($map, &$element){
if(!isset($element['inh'])){ if($pid = $element['parent']){
$element['inh'] = array_merge([$pid], parentList
($map, $map[$pid])); }else{
$element['inh'] = [];
}
}
return $element['inh'];
}
foreach($a as &$e){
parentList($a, $e);
}
PD9waHAKCiRhID0gWwoJMT0+WwoJCSdpZCc9PjEsCgkJJ3BhcmVudCc9PjAKCV0sCgkyPT5bCgkJJ2lkJz0+MiwKCQkncGFyZW50Jz0+MQoJXSwKCTM9PlsKCQknaWQnPT4zLAoJCSdwYXJlbnQnPT4yCgldLAoJND0+WwoJCSdpZCc9PjQsCgkJJ3BhcmVudCc9PjEKCV0KXTsKCmZ1bmN0aW9uIHBhcmVudExpc3QoJG1hcCwgJiRlbGVtZW50KXsKCWlmKCFpc3NldCgkZWxlbWVudFsnaW5oJ10pKXsKCQlpZigkcGlkID0gJGVsZW1lbnRbJ3BhcmVudCddKXsKCQkJJGVsZW1lbnRbJ2luaCddID0gYXJyYXlfbWVyZ2UoWyRwaWRdLCBwYXJlbnRMaXN0KCRtYXAsICRtYXBbJHBpZF0pKTsKCQl9ZWxzZXsKCQkJJGVsZW1lbnRbJ2luaCddID0gW107CgkJfQoJfQoJcmV0dXJuICRlbGVtZW50WydpbmgnXTsKfQoKZm9yZWFjaCgkYSBhcyAmJGUpewoJcGFyZW50TGlzdCgkYSwgJGUpOwp9CgpwcmludF9yKCRhKTs=