2016-09-26 93 views
0

这是我的数组看起来像:如何删除存在从对象的数组中的项?

array(3) { 
    [0]=> 
    string(3) "600" 
    [1]=> 
    string(3) "601" 
    [2]=> 
    string(3) "603" 
} 

这是我的目标看起来像:

array(7) { 
    [0]=> 
    object(stdClass)#688 (6) { 
    ["id"]=> 
    string(3) "601" 
    ["name"]=> 
    string(10) "test8opkpo" 
    ["avatar"]=> 
    string(85) "http://avatars/user/medium.png" 

    ["url"]=> 
    string(86) "/index.php" 

    ["isOnline"]=> 
    int(0) 
    ["lastseen"]=> 
    string(11) "2 weeks ago" 
    } 
    [1]=> 
    object(stdClass)#689 (6) { 
    ["id"]=> 
    string(3) "604" 
    ["name"]=> 
    string(6) "nopita" 
    ["avatar"]=> 
    string(85) "http://avatars/user/medium.png" 

    ["url"]=> 
    string(82) "/index.php" 
    ["isOnline"]=> 
    int(0) 
    ["lastseen"]=> 
    string(10) "1 week ago" 
    } 
    [2]=> 
    object(stdClass)#690 (6) { 
    ["id"]=> 
    string(3) "603" 
    ["name"]=> 
    string(6) "test_b" 
    ["avatar"]=> 
    string(85) "http://avatars/user/medium.png" 

    ["url"]=> 
    string(82) "/index.php" 
    ["isOnline"]=> 
    int(0) 
    ["lastseen"]=> 
    string(11) "6 hours ago" 
    } 

现在我想从对象中删除,每个项目的编号匹配数组内的值。

的对象所以最终的输出不应该包含的ID是呈现给在数组中。怎么做?

我尝试使用array_diff_keyunset无济于事。

$contactArray[$i]表示每个ID在对象

if (in_array($contactArray[$i], $array)) { 
    $a = array_diff_key($results->contacts, [$i => $contactArray[$i]]); 
} 

回答

1

我创造了我自己的一套例子来模拟要在发生什么你的阵列:

$x = array('600','601', '603'); 
$y = array(
    array("id" => "600", 
      "name" => "test", 
      "avatar" => "image" 
     ), 
    array("id" => "601", 
      "name" => "test1", 
      "avatar" => "image1" 
     ), 
    array("id" => "602", 
      "name" => "test2", 
      "avatar" => "image2" 
     ), 
    array("id" => "603", 
      "name" => "test3", 
      "avatar" => "image3" 
     ), 
    array("id" => "604", 
      "name" => "test4", 
      "avatar" => "image4" 
     ) 
); 



echo '<pre>'; 
    var_dump($y); 
echo '</pre>'; 

$new_arr_ = array(); 
for($i = 0, $ctr = count($y); $i < $ctr; $i++) { 
    if(!in_array($y[$i]["id"], $x)) { 
     $new_arr_[] = array($y[$i]["id"], $y[$i]["name"], $y[$i]["avatar"]); 
    } 
} 

echo '<pre>'; 
    var_dump($new_arr_); 
echo '</pre>'; 

希望它有帮助。

+0

@thanks很多它的工作原理 – 112233

0

如果我理解正确,下面应该工作:

$contactArray = array_filter($contactArray, function ($v) use ($array) { 
     return !in_array(isset($v->id)?$v->id:null, $array); 
}); 
+0

我得到这个错误语法错误,意外“)”在这条线:返回_......可能我想返回的对象存储到变量 – 112233

+0

是的,我已经无法正常平衡它们。立即尝试 – apokryfos