Удалите перекрывающиеся массивы в php - PullRequest
1 голос
/ 07 ноября 2010

Я сделал функцию (размещена внизу), которая будет смотреть на многомерный массив и удалять «частично дубликаты».Я имею в виду следующее:

Array
(
    [0] => Array(5,10)
    [1] => Array(5,10,15)
)

Все элементы первого массива (5, 10) также доступны во втором массиве (5,10,15), и поэтому мы хотим удалитьпервый массив, так что у нас осталось:

Array(
    [1] => Array(5,10,15)
)

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

Большое спасибо заранее!


$groups =  array(
  array(5,10),
  array(5,10,15)
);
$flag = array();
//clone the groups - we now have two identical arrays with all the groups
$groupsInner = $groups;
//iterate first array of groups
foreach($groups as $index=>$group){
    $flag[]=$index;

    //iterate second array of groups
    foreach($groupsInner as $indexInner=>$groupInner){
        if(!in_array($indexInner, $flag)){

            if(count($group)<count($groupInner)){
                $diff = array_diff($group, $groupInner);
                $array_to_be_deleted = $index;
                $compared_to_array = $indexInner;
                }else{
                $diff = array_diff($groupInner, $group);
                $array_to_be_deleted = $indexInner;
                $compared_to_array = $index;
            }

            //no diff means they are "partly duplicates"
            if(count($diff)==0){
                unset($groups[$array_to_be_deleted]);
                unset($groupsInner[$array_to_be_deleted]);
            }
        }
    }
}

1 Ответ

1 голос
/ 07 ноября 2010

array_unique(array_merge($first_array,$second_array))

...