Я сделал функцию (размещенную внизу), которая будет рассматривать многомерный массив и удалить «частично дубликаты». Что я имею в виду это:Удалить перекрывающиеся массивы в php
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]);
}
}
}
}
Из описания я понимаю, что он хочет сохранить 2-мерный массив, но удалить элементы, если они появляются в нескольких «групп». – Evert
@Evert: Да, вы правы. Каждый массив внутри основного массива представляет собой группу. Если все члены группы также входят в большую группу, меньшую группу можно удалить. Группа может быть удалена или сохранена: вы не можете удалить определенные элементы (члены) из группы. – sqren