我正在尝试检查数组子项中的下一项是否仅匹配某些子项的值,然后删除找到的匹配项。
我最终将需要在删除之前添加代码,如果找到匹配项,它将收集子项目之间的差异,因此我不能简单地使用array_unique()。
以下内容在一定程度上有效;
$n = 1;
for ($i = 0; $i < count($array); $i++) {
if($array[$i]['author'] == $array[$n]['author']
&& $array[$i]['parentID'] == $array[$n]['parentID']) {
unset($array[$n]);
//skip the removed item and continue;
$i++;
$n++;
}
$n++;
}
但是,它仅删除一个实例,并保留所有符合以下条件的实例。 (下面删除了1个,但未删除2个)
[0] => Array
(
[parentID] => 85560
[author] => Carla
[revisions] => 1
)
[2] => Array
(
[parentID] => 85560
[author] => Carla
[revisions] => 2
)
[3] => Array
(
[parentID] => 85560
[author] => Charlie
[revisions] => 4
)
这是初始输入;
[0] => Array
(
[parentID] => 85560
[author] => Carla
[revisions] => 1
)
[1] => Array
(
[parentID] => 85560
[author] => Carla
[revisions] => 2
)
[2] => Array
(
[parentID] => 85560
[author] => Carla
[revisions] => 2
)
[3] => Array
(
[parentID] => 85560
[author] => Charlie
[revisions] => 4
)
答案 0 :(得分:2)
您可以使用array_filter:
$unique = [];
$array = array_filter($array, function($value) use (&$unique) {
$key = implode('', $value);
if(!in_array($key, $unique)) {
$unique[] = $key;
return true;
}
return false;
});
var_dump($array);
或者,如果不需要保留初始索引,则可以使用array_reduce:
$array = array_reduce($array, function ($carry, $item) {
$key = implode('', $item);
if (!isset($carry[$key])) {
$carry[$key] = $item;
}
return $carry;
}, []);
var_dump(array_values($array));