由于有很多方法可以实现所需的结果,许多人提供了!in_array()
作为答案,而且OP已经提到使用了array_unique
,我想提供一些替代方案。
使用array_diff
(php >= 4.0.1 || 5)可以过滤掉仅存在于新数组中的值。或者,您还可以使用array_diff_assoc
比较键和值。http://php.net/manual/en/function.array-diff.php
$currentValues = array(1, 2);
$newValues = array(1, 3, 1, 4, 2);
var_dump(array_diff($newValues, $currentValues));
结果:
Array
(
[1] => 3
[3] => 4
)
http://ideone.com/SWO3D1
另一种方法是使用
array_flip
将值分配为键,并使用
isset
进行比较,这比在大数据集上使用
in_array
要快得多。同样,这会过滤掉当前值中不存在的新值。
$currentValues = [1, 2];
$newValues = [1, 3, 1, 4, 2];
$a = array();
$checkValues = array_flip($currentValues);
foreach ($newValues as $v) {
if (!isset($checkValues[$v])) {
$a[] = $v;
}
}
结果:
Array
(
[0] => 3
[1] => 4
)
http://ideone.com/cyRyzN
使用任一方法,您都可以使用array_merge
将唯一的新值附加到当前值。
- http://ideone.com/JCakmR
- http://ideone.com/bwTz2u
结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Arr::wrap()
就是答案,详见文档。 - peter.babic