Главная > Статьи > Пересечения массивов или Super Intersect

Пересечения массивов или Super Intersect

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

/*
!!FIX!!
Учитывется, если массив всего один, он же и возвращается :)
-----
Описание:
Функция делает проверку на вхождения каждого элемента в каждый под массив большого массива.
т.е. скажем у Вас имеются N простых массивов.
создаете один большой массив $bigarr путем добавления простых в большой:
$arr1 = array(10,11,14,18,19,20);
$arr2 = array(10,11,18,19,20,30,31,33);
$arr3 = array(18,19,20,21,32,33,36,41,57,58,63);
$bigarr = array();
$bigarr[] = $arr1;
$bigarr[] = $arr2;
$bigarr[] = $arr3;
Исходный массив:
$bigarr = Array
(
    [0] => Array
        (
            [0] => 10
            [1] => 11
            [2] => 14
            [3] => 18
            [4] => 19
            [5] => 20
        )
    [1] => Array
        (
            [0] => 10
            [1] => 11
            [2] => 18
            [3] => 19
            [4] => 20
            [5] => 30
            [6] => 31
            [7] => 33
        )
    [2] => Array
        (
            [0] => 18
            [1] => 19
            [2] => 20
            [3] => 21
            [4] => 32
            [5] => 33
            [6] => 36
            [7] => 41
            [8] => 57
            [9] => 58
            [10] => 63
        )
)
*/
function array_super_intersect($bigarr)
        {
        $finded=array();
        if (sizeof($bigarr)>1)
            {
            foreach ($bigarr as $num => $cmass)
                {
                $testmass = $bigarr;
                unset($testmass[$num]);
                foreach ($cmass as $cnum => $c_el)
                    {
                    reset($testmass);
                    $ppp=0;
                    foreach ($testmass as $tnum => $next_elements)
                        {
                        if (in_array($c_el, $next_elements))
                            {
                            $ppp++;
                            }
                        }
                    if ($ppp==sizeof($bigarr)-1 &&  !in_array($c_el, $finded))
                        $finded[] = $c_el;
                    }
                }
            }
        else 
            {
            $finded = array_values($bigarr[0]);
            }
        return $finded;
        }
echo '<pre>'.print_R(array_super_intersect($bigarr),1).'</pre>';
/*
получим
   Array
        (
            [0] => 18
            [1] => 19
            [2] => 20
        )
)
*/  

Статьи ,

  1. Комментариев пока нет.
  1. Трекбеков пока нет.