开发者

Remove overlapping arrays in php

开发者 https://www.devze.com 2023-01-24 00:54 出处:网络
I\'ve made a function (posted at the bottom), which will look at a multi-dimensional array, and remove \"partly duplicates\". What I mean by this is:

I've made a function (posted at the bottom), which will look at a multi-dimensional array, and remove "partly duplicates". What I mean by this is:

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

All the elements in the first array (5, 10), are also available in the second array (5,10,15), and we therefore want to remove the first array so we are left with:

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

The function I've made works, although it is very slow, and I'm therefore turning to you, in the hope that your expertise, may speed up my 开发者_如何转开发function.

Thank you very much in advance!


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


array_unique(array_merge($first_array,$second_array))

0

精彩评论

暂无评论...
验证码 换一张
取 消