Если я правильно понимаю, что вы собираетесь, вот один из способов сделать это, отфильтровывая массив множеств с помощью array_intersect()
.Обратный вызов фильтра должен возвращать true, только если пересечение текущего набора и предыдущего набора пусто.
$result = array_filter($sets, function($set) {
static $previous = [];
$matches = array_intersect($set, $previous);
$previous = $set;
return !$matches;
});
Код в первой части ответа показывает, как удалить каждый массив, имеющийзначения, общие с предыдущим единственным массивом.Если вам нужно удалить наборы, которые имеют общие значения с любым из предыдущих массивов, я бы сделал это следующим образом:
$result = array_filter($sets, function($set) {
static $previous = [];
foreach ($set as $value) {
if (isset($previous[$value])) $matches = true;
$previous[$value] = true;
}
return empty($matches);
});