【问题标题】:php compare/diff an array with an array of objectsphp比较/比较一个数组和一个对象数组
【发布时间】:2013-05-17 09:19:07
【问题描述】:

我有 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。但我需要帮助;>

谢谢。

法比恩

【问题讨论】:

  • 你用的是什么版本的php?
  • 版本5.3.8,不过现在已经解决了,谢谢。

标签: php arrays compare diff laravel


【解决方案1】:

假设$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 秒)

【讨论】:

  • 谢谢 Babs Seed,这正是我所需要的。
【解决方案2】:

你可以试试:

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

See Live DEMO

【讨论】:

  • 这不返回一个对象数组,它返回一个数组。不过感谢 eval.in 链接,我以前从未见过该网站。
【解决方案3】:

遍历第二个数组并使用in_array 方法检查第一个中的现有值

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

【讨论】:

    【解决方案4】:

    对于早于 5.3 的版本

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

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多