У меня есть следующий массив:
Array ( [0] => Array ( [0] => 87 [1] => 58 [2] => 85 [3] => 86 ) [1] => Array ( [0] => 58 [1] => 84 ) [2] => Array ( [0] => 58 ) )
Этот массив выше – пример. Фактический массив имеет переменный размер, но структурирован таким образом. В принципе, я хотел бы запустить array_intersect
для каждого массива второго уровня и захватить значение (число), которое является общим между ними. В этом случае это будет 58
.
Я не совсем уверен, с чего начать. Любой совет?
Это работает для меня:
function multi_intersect($arr) { $return = array(); foreach ($arr as $a) { foreach ($arr as $b) { if ($a === $b) continue; $return = array_merge($return, array_intersect($a, $b)); } } return array_unique($return); }
Должно получиться:
Array ( [0] => 58 )
Вышеупомянутое будет работать, если у вас есть общее число, по крайней мере, в двух из подмассивов.
После редактирования :
Вы можете просто использовать call_user_func_array
для array_intersect
, если вы хотите найти числа, которые содержатся во всех подмассивах:
$intersect = call_user_func_array('array_intersect', $arr);
Если в вашем примере есть ошибка, и в элементе [0] из массива «root» должно быть 58, вы должны просто запустить
$res = $arr[0]; foreach($arr as $elem) $res = array_intersect($res, $elem);
Более общее решение (вложенные массивы):
<?php //$arr -> your multidimensional array function array_intersect_recursive($arr) { $first = true; foreach($arr as $elem) { if(is_array($elem)) $elem = array_intersect_recursive($arr); if($first) { $first = false; $res = $elem; } else $res = array_intersect($res, $elem); } }
Я не тестировал его, но надеюсь, что у вас есть идея.