Intereting Posts
mysql выбирает данные из двух таблиц и различной структуры Ошибка «Неожиданный T_OBJECT_OPERATOR» в PHP Как заменить все пробелы внутри элементов HTML на & nbsp; используя preg_replace? Как запустить wget из php, чтобы выход отображался в окне браузера? Symfony 1.4: лучший способ обеспечить загрузку файла без использования шаблона / представления Самый эффективный с точки зрения памяти способ разделить куски переменной величины? Как разрешить favicon.ico не найдена ошибка на apache youtube-dl и php exec Вызов PHP-скриптов из Javascript без оставления текущей страницы Очистить данные в таблице MySQL с помощью PHP? Перезагрузка nginx & php5-fpm не обновляет изменения в php.ini Упрощение форм PHP, которые предварительно заполняются данными dabase и проверкой ошибок, поэтому активно перезаписывать данные $ _POST Экзотические имена методов, констант, переменных и полей – ошибка или функция? PHP is_dir () возвращает false на сетевом диске Windows как добавить разные изображения в мою RSS-ленту, используя php

Поиск общей ценности среди подмассивов в многомерном массиве

У меня есть следующий массив:

Array ( [0] => Array ( [0] => 87 [1] => 58 [2] => 85 [3] => 86 ) [1] => Array ( [0] => 58 [1] => 84 ) [2] => Array ( [0] => 58 ) ) 

Этот массив выше – пример. Фактический массив имеет переменный размер, но структурирован таким образом. В принципе, я хотел бы запустить array_intersect для каждого массива второго уровня и захватить значение (число), которое является общим между ними. В этом случае это будет 58 .

Я не совсем уверен, с чего начать. Любой совет?

Solutions Collecting From Web of "Поиск общей ценности среди подмассивов в многомерном массиве"

Это работает для меня:

 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); } } 

Я не тестировал его, но надеюсь, что у вас есть идея.