Бортовой журнал Ктулху
Все должно быть не так как нам хочется, но так как должно быть

Сравнение нескольких массивов между собой

Как сравнить между собой неизвестное количество массивов и как вывести их общие значения? Таким вопросом я задался недавно.

Как выглядели массивы: 

array(size=6)
 0 =>
   array(size=4)
     'DDDD' =>8FF773161
     'LLLLL' =>'0'
     'SSSS' =>Feb  2 2011 12:00AM
     'CCCC' =>'Mar  2 2016 12:00AM'
 1 =>
   array(size=4)
     'DDDD' =>8FF773161
     'LLLLL' =>'0'
     'SSSS' =>Feb  2 2011 12:00AM
     'CCCC' =>'Jan 21 2015 12:00AM'
 2 =>
   array(size=4)
     'DDDD' =>  '8773161'
     'LLLLL' =>'0'
     'SSSS' =>Feb  2 2011 12:00AM
     'CCCC' =>'Dec  8 2014 12:00AM'
 3 =>
   array(size=4)
     'DDDD' =>8FF773161
     'LLLLL' =>'0'
     'SSSS' =>Feb  2 2011 12:00AM
     'CCCC' =>'Jun 25 2014 12:00AM
 4 =>
   array(size=4)
     'DDDD' =>8FF773161
     'LLLLL' =>'0'
     'SSSS' =>'Feb  2 2011 12:00AM'
     'CCCC' =>'Jun 24 2014 12:00AM'
 5 =>
   array(size=4)
     'DDDD' =>8FF773161
     'LLLLL' =>'0'
     'SSSS' =>'Feb  2 2011 12:00AM'
     'CCCC' =>'Jun 23 2014 12:00AM’

Для поиска совпадений в массивах нужно использовать функцию array_intersect. Недостатком этой функции является то, что количество массивов должно быть известно и равно количеству аргументов.

В моем же случае могло быть два массива или десять или миллион.

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);

На помощь в этом случае пришла функция call_user_func_array.

Функция вызывает пользовательскую функцию с массивом параметров. Таким образом, вызываем 'array_intersect' через call_user_func_array.

$result = call_user_func_array('array_intersect',$arrays);

В результате имеем общие поля:

Array ( [DDDD] => 8773161 [SSSS] => Feb 2 2011 12:00AM )

Рейтинг@Mail.ru
Яндекс.Метрика
Hosting Ukraine
Счетчик PR-CY.Rank
Счетчик PR-CY.Rank