【问题标题】:The best way to search all items in an array of objects that doesn't exist in another array of object in php在php中的另一个对象数组中不存在的对象数组中搜索所有项目的最佳方法
【发布时间】:2022-10-25 01:34:03
【问题描述】:

像标题一样,我有两个都包含对象的数组,如下所示:

array $a (size=2)
    0 => 
       object(A)
       private '_id' => int 10
    1 => 
       object(A)
       private '_id' => int 11


 array $b (size=1)
    0 => 
       object(B)
       private '_id' => int 10

我在这里所做的是我试图找出数组 $a 中的哪个项目在数组 $b 中不存在,在这种情况下它是 $a[1]。

循环两个数组都可以做到这一点,但我想看看是否有另一种更有效和优雅的方法。感谢您的任何建议!

【问题讨论】:

  • 通常使用array-udiff() 函数:php.net/manual/en/function.array-udiff.php
  • @arkascha 你介意再解释一下吗?我尝试了 array_udiff() 并且无法得到我想要的结果,这就是我所做的: function compare($a,$b){return ($a->id()!=$b->id() )?1:0;} var_dump(array_udiff($a,$b,'compare'));谢谢你。
  • 我在下面发布了一个答案;-)

标签: php search multidimensional-array


【解决方案1】:

对我来说就像魅力一样:

<?php
$a = [
  (object) [ '_id' => 10 ],
  (object) [ '_id' => 11 ],
];
$b = [
  (object) [ '_id' => 10 ],
];

var_dump(array_udiff($a, $b, function($l, $r) {
  return $l->_id > $r->_id ? 1 : $l->_id < $r->_id ? -1 : 0;
}));

输出是:

array(1) {
  [1]=>
  object(stdClass)#2 (1) {
    ["_id"]=>
    int(11)
  }
}

我在对该问题的评论中向您指出的文档清楚地指出:

比较函数必须返回一个小于、等于或 如果第一个参数被认为是大于零 分别小于、等于或大于第二个。

您尝试的功能会执行其他操作,因此结果是不可预测的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多