Как фильтровать массив объектов?

У меня есть массив объектов (показано ниже), и я хотел бы написать функцию, которая возвращает тот же массив, но с «объектами (объектами)», которые удовлетворяют критерию, удаленному.

Функция:

1- проверить, существует ли индекс 2, если он существует, проверяет требуемое значение и если индекс объекта равен этому значению, удалите весь объект.

Например :

Array ( [course] => Array ( [0] => stdClass Object ( [name] => Programmation Web [description] => [public] => 0 [requests] => 0 [id] => 245 [members] => Array ( [0] => stdClass Object ( [id] => 11 [name] => Robert Smith ) ) [projects] => Array ( [0] => stdClass Object ( [id] => 1923 [title] => Sans titre (1) [type] => portfolio ) ) [project_count] => 1 [admins] => Array ( [0] => stdClass Object ( [member] => 11 [firstname] => Robert [lastname] => Smith ) ) [topic_name] => Le PHP [activites] => Array ( [0] => stdClass Object ( [topic_name] => [topic_id] => 42 [post_parent] => 107 [post_body] => Oui moi aussi je me demande ça. [post_id] => 109 ) ) [forums] => Array ( [0] => stdClass Object ( [forum_name] => Discussion générale [forum_id] => 101 ) ) ) [1] => stdClass Object ( [name] => Les bases de données [description] => [public] => 0 [jointype] => controlled [grouptype] => course [membershiptype] => admin [topic_name] => Difficulté [activites] => Array ( [0] => stdClass Object ( [topic_name] => [topic_id] => 44 [post_parent] => 111 [post_body] => Ouah! [post_id] => 112 ) ) [forums] => Array ( [0] => stdClass Object ( [forum_name] => Le MySQL [forum_id] => 103 ) ) ) ) ) 

Если есть объект, значение admins-> member которого равно 11, удалите объект и верните массив без этого объекта. Таким образом, возвращаемый массив будет следующим:

  Array ( [course] => Array ( [0] => stdClass Object ( [name] => Programmation Web [description] => [public] => 0 [requests] => 0 [id] => 245 [members] => Array ( [0] => stdClass Object ( [id] => 11 [name] => Robert Smith (smithrobert) ) ) [projects] => Array ( [0] => stdClass Object ( [id] => 1923 [title] => Sans titre (1) [type] => portfolio ) ) [project_count] => 1 [admins] => Array ( [0] => stdClass Object ( [member] => 11 [firstname] => Robert [lastname] => Smith ) ) [topic_name] => Le PHP [activites] => Array ( [0] => stdClass Object ( [topic_name] => [topic_id] => 42 [post_parent] => 107 [post_body] => Oui moi aussi je me demande ça. [post_id] => 109 ) ) [forums] => Array ( [0] => stdClass Object ( [forum_name] => Discussion générale [forum_id] => 101 ) ) ) ) ) 

Как мне это сделать?

Хотите фильтровать массив? Используйте array_filter !

 $new_array = array_filter($array, function($obj){ if (isset($obj->admins)) { foreach ($obj->admins as $admin) { if ($admin->member == 11) return false; } } return true; }); 

Вы можете использовать array_filter с пользовательским обратным вызовом:

 function filter_callback($element) { if (isset($element->foo) && $element->foo == 'some_value') { return TRUE; } return FALSE; } $arr = array_filter($arr, 'filter_callback');