我有两个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出现在第二个数组中。但是我需要帮助;>
谢谢。
法比
假设$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]);
}
}
实时演示(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);
实时演示(0.008秒)
您可以尝试:
$diff = array_diff(array_map(function ($v) {
return $v->id;
}, $array2), $array1);
参见Live DEMO
遍历第二个数组,并使用in_array
方法检查第一个
$firstArray = array(5, 6);
foreach ($objects as $key => $object) {
if (in_array($object->id, $firstArray)) {
unset($objects[$key];
}
}
5.3以下版本
foreach( $arr_2nd as $key => $val )
{
$arr_2nd[$key] = $val->id;
}
array_diff( $arr_1st, $arr_2nd );