快速提问:有没有办法在PHP中提供一个与array_unique函数等效函数的闭包,以便在比较数组中的两个项时可以指定自己的比较闭包?我有一个类实例数组(可能包含重复项),并希望告诉PHP使用特定的逻辑来确定唯一性。
PHP使用usort()方法为此提供排序 - 只是想知道它是否也可用于唯一性检查。谢谢!
答案 0 :(得分:1)
有array_filter可以对数组中的每个元素应用回调,并返回true / false,表示是否将该值保留在返回的数组中。 Here is a comment使用array_filter删除数组中的重复项。
答案 1 :(得分:0)
我找不到你想要的东西,但我想也许写下你自己的功能并不太难......
$a = new StdClass;
$b = new StdClass;
$c = new StdClass;
$d = new StdClass;
$a->a = 1;
$b->a = 1;
$c->c = 1;
$d->c = 1;
$objects = array( $a,$b,$c,$d );
function custom_array_unique( array $objects ) {
foreach( $objects as $k =>$object ) {
foreach( $objects as $k2 => $object2 ) {
if ( $k !== $k2 && $object == $object2 ) {
unset( $objects[$k] );
}
}
}
return $objects;
}
print_r( custom_array_unique($objects));
Array
(
[1] => stdClass Object
(
[a] => 1
)
[3] => stdClass Object
(
[c] => 1
)
)
答案 2 :(得分:0)
array_unique()
的{{3}}没有提供回调版本的任何链接,左侧链接列表中没有一个名为array_uunique()
的函数(这是如果它遵循其他数组排序函数的命名约定,应调用什么样的函数 - 但是当涉及到函数命名约定时,PHP不是很可靠。)
您可以使用双foreach
循环自行添加此功能:
$uniqueness_fails = false;
foreach ( $myarray as $keyA => $valueA ) {
foreach ( $myarray as $keyB => $valueB ) {
if ( $keyA != $keyB and my_equality_function($valueA, $valueB) ) {
$uniqueness_fails = true;
break 2;
}
}
}