我知道有array_diff,并array_udiff用于比较两个数组之间的区别,但我会如何使用对象的两个数组做呢?
array(4) {
[0]=>
object(stdClass)#32 (9) {
["id"]=>
string(3) "205"
["day_id"]=>
string(2) "12"
}
}
Run Code Online (Sandbox Code Playgroud)
我的数组就像这个,我有兴趣看到基于ID的两个数组的区别.
Jor*_*ing 67
这正是array_udiff为了什么.编写一个以您希望的方式比较两个对象的函数,然后告诉array_udiff您使用该函数.像这样的东西:
function compare_objects($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
$diff = array_udiff($first_array, $second_array, 'compare_objects');
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用PHP> = 5.3,则可以使用匿名函数而不是声明函数:
$diff = array_udiff($first_array, $second_array,
function ($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
);
Run Code Online (Sandbox Code Playgroud)
这是另一个选项,如果您想根据对象实例运行差异。您将使用它作为您的回调array_udiff:
function compare_objects($a, $b) {
return strcmp(spl_object_hash($a), spl_object_hash($b));
}
Run Code Online (Sandbox Code Playgroud)
如果您确定数组都只包含对象,那么您只想使用它 -这是我的个人用例。
如果您想比较字符串属性(例如名称),这里是另一个选择:
$diff = array_udiff($first_array, $second_array,
function ($obj_a, $obj_b) {
return strcmp($obj_a->name, $obj_b->name);
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28990 次 |
| 最近记录: |