3v4l.org

run code in 300+ PHP versions simultaneously
<?php $data = array( 3 => [4095, 651], 4095 => [3], 651 => [4432], 4432 => [3, 651], 92 => [45], 45 => [92], ); function getChildren($ind_ar,$prev_ar,$data, $rem){ $tmp = []; $mark = 0; foreach($ind_ar as $ind){ foreach($data[$ind] as $new_val){ if(!in_array($new_val,$prev_ar) && $new_val != $ind && $new_val != $rem){ $mark = 1; $tmp[] = $new_val; } foreach($data[$new_val] as $new){ if(!in_array($new,$prev_ar) && $new != $ind && $new != $rem){ $mark = 1; $tmp[] = $new; } } } } $res_ar = $prev_ar; if(!empty($tmp)) $res_ar = array_unique(array_merge($tmp,$prev_ar)); if($mark) $res_ar = getChildren($tmp,$res_ar,$data, $rem); return $res_ar; } foreach($data as $in => &$data_val) { $data_val = getChildren([$in],$data_val,$data, $in); sort($data_val); } print_r($data);

preferences:
23.79 ms | 408 KiB | 5 Q