php比较/ diff一个带有对象数组的数组

时间:2013-05-22 10:46:48

标签: php arrays compare diff laravel

我有2个PHP数组,一个简单的数组:

array
  0 => int 5
  1 => int 6

和一系列对象:

array
  0 => 
    object(stdClass)[43]
      public 'id' => int 1
  1 => 
    object(stdClass)[46]
      public 'id' => int 3
  2 => 
    object(stdClass)[43]
      public 'id' => int 5
  3 => 
    object(stdClass)[46]
      public 'id' => int 6
  4 => 
    object(stdClass)[46]
      public 'id' => int 7

我想对这两个数组进行差异化,以消除第一个数据中存在的第二个数组。在这个例子中,我不希望第二个数组中的id 5和6。但我需要帮助;>

谢谢。

法比安

4 个答案:

答案 0 :(得分:3)

您可以尝试:

$diff = array_diff(array_map(function ($v) {
    return $v->id;
}, $array2), $array1);

See Live DEMO

答案 1 :(得分:3)

假设$objects是您的对象数组,而$values是要移除的值数组......

如果要返回对象,可以使用foreach循环:

$values = array(5, 6);
$objects = array(
    (object) array("id" => 1),
    (object) array("id" => 3),
    (object) array("id" => 5),
    (object) array("id" => 6),
    (object) array("id" => 7)
);
foreach($objects as $key => $object) {
    if(in_array($object->id,$values)) {
        unset($objects[$key]);
    }
}

Live demo(0.008秒)

如果你想使用diff函数本身(这可能但很笨拙,可读性较差并且只返回一个值数组)你可以(如Baba建议的那样)返回对象的id内联:

$values = array(5, 6);
$objects = array(
    (object) array("id" => 1),
    (object) array("id" => 3),
    (object) array("id" => 5),
    (object) array("id" => 6),
    (object) array("id" => 7)
);
$diff = array_diff(array_map(function ($object) {
    return $object->id;
}, $objects), $values);

Live demo(0.008秒)

答案 2 :(得分:1)

遍历第二个数组并使用in_array方法检查第一个

中的现有值
$firstArray = array(5, 6);
foreach ($objects as $key => $object) {
    if (in_array($object->id, $firstArray)) {
        unset($objects[$key];
    }
}

答案 3 :(得分:1)

对于5.3以前的版本

 foreach( $arr_2nd as $key => $val  )
{
   $arr_2nd[$key] = $val->id;
}

array_diff( $arr_1st, $arr_2nd );