2013-05-22 100 views
1

阵列的阵列我有2个PHP阵列,一个简单的:PHP比较/ DIFF与对象

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

谢谢。

法比安

+0

你滚动的PHP版本的旧的? –

+0

版本5.3.8,但现在解决了,谢谢。 – feub

回答

2

假设$objects是你的一系列对象TS,并$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秒)

+0

谢谢Babs Seed,这正是我需要的。 – feub

+0

@feub很高兴我可以帮忙。 –

1

循环所述第二阵列上,并使用in_array方法在第一

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

检查现有值可以尝试:

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

See Live DEMO

+0

这不返回一个对象数组,它返回一个数组。感谢eval.in链接,但我从来没有见过这个网站。 –

1

对于版本低于5.3

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

array_diff($arr_1st, $arr_2nd);