Найти массив ключей в массиве объектов с учетом значения атрибута

У меня есть массив объектов следующим образом:

Array ( [945] => member Object ( [id] => 13317 [name] => Test 999 [last_name] => Test 999 ) [54] => member Object ( [id] => 13316 [name] => Manuel [last_name] => Maria parra ) [654] => member Object ( [id] => 13315 [name] => Byron [last_name] => Castillo ) [656] => member Object ( [id] => 13314 [name] => Cesar [last_name] => Vasquez ) ) 

Мне нужно удалить один из этих объектов в соответствии со значением атрибута.
Например, я хочу удалить из массива идентификатор объекта 13316.

  • Как использовать $ this вне класса?
  • PHP - определение статического массива объектов
  • Как получить элемент из массива объектов PHP?
  • Объекты PHP против массивов
  • PHP: удалить объект из массива
  • Как получить имя объекта или класса?
  • jQuery JSON Decode (PHP для Javascript)
  • Ошибка ввода PHP / SQL при использовании именных заполнителей
  • PHP список всех файлов в каталоге
  • PHP __PHP_Incomplete_Class Объект с моими данными $ _SESSION
  • Массив объектов PHP
  • Сортировка массива объектов в PHP в конкретном порядке
  • 5 Solutions collect form web for “Найти массив ключей в массиве объектов с учетом значения атрибута”

    Вот функциональный подход:

     $neededObjects = array_filter( $objects, function ($e) { return $e->id != 13316; } ); 
     function filter_by_key($array, $member, $value) { $filtered = array(); foreach($array as $k => $v) { if($v->$member != $value) $filtered[$k] = $v; } return $filtered; } $array = ... $array = filter_by_key($array, 'id', 13316); 

    Поскольку имеется много решений, я предлагаю альтернативу использованию массива:

     $storage = new SplObjectStorage; // create an Object Collection $storage->attach($memberObject); // add an object to it $storage->detach($memberObject); // remove that object 

    Вы можете сделать это в пользовательский класс MemberCollection с помощью методов Finder и других служебных операций, например

     class MemberCollection implements IteratorAggregate { protected $_storage; public function __construct() { $this->_storage = new SplObjectStorage; } public function getIterator() { return $this->_storage; } public function addMember(IMember $member) { $this->_storage->attach($member); } public function removeMember(IMember $member) { $this->_storage->detach($member); } public function removeBy($property, $value) { foreach ($this->_storage as $member) { if($member->$property === $value) { $this->_storage->detach($member); } } } } 

    Может быть, слишком много для вашего сценария.

    Используйте функцию поиска массива:

     //return array index of searched item $key = array_search($search_value, array_column($list, 'column_name')); $list[key]; //return array item 
      foreach ($array as $key=>$value) if ($value->id==13316) { unset($array[$key]); break; } с  foreach ($array as $key=>$value) if ($value->id==13316) { unset($array[$key]); break; } 
    PHP is the Best Programming Language in the world.