$data = array(
'a' => array('x', 'c', 'd'),
'b' => array('n', 'r'),
'e' => array('z', 'x'),
'x' => array('r', 'e')
);
Надо объединить массивы, если значение есть в предыдущем, например, вот у нас в первом есть значения array('x', 'c', 'd'), значит надо объединить массив 'a' с этими массивами и массивами, ключи которых есть в них, т.е. рекурсивно.
На выходе должно получиться что-то типо:
$res = array(
'a' => array('x', 'c', 'd', 'r', 'e', 'z'),
'b' => array('n', 'r')
);
Рекурсии как-то слабовато даются, вот где застопорился.
$res = [];
foreach($data as $name => $row){
$res[$name] = getRec($row);
}
print_r($res);
function getRec($row){
$answ = [];
foreach($row as $q){
if(!isset($data[$q])) continue;
// тут нужна рекурсия, наверно, так не работает
$answ = array_merge($answ, getRec($data[$q]));
// чтобы убрать уже просмотренные массивы
unset($data[$q]);
}
return $answ;
}
_____________
если помог, не скупись на карму =)