Найти массив ключей в массиве объектов с учетом значения атрибута
У меня есть массив объектов следующим образом:
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.
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; }