2016-09-26 3 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" 
    } 

Теперь я хочу, чтобы удалить из объекта, идентификатор каждого элемента, что соответствует значению внутри массива.

Таким образом, окончательный вывод объекта не должен содержать идентификаторы, присутствующие в указанном массиве. Как это сделать?

Я пробовал использовать array_diff_key и unset безрезультатно.

$contactArray[$i] представляют каждый идентификатор в объекте

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

Я получаю эту ошибку синтаксиса ошибки, неожиданную ')' в этой строке: return! In _...... возможно, я хотел бы сохранить возвращенный объект в переменную – 112233

+0

Да, я не сбалансировал их правильно. Попробуйте сейчас – apokryfos

Смежные вопросы