Trouver la clé de tableau dans le tableau d'objets avec une valeur d'attribut
j'ai un tableau d'objets comme ceci:
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
        )
)
  
    je dois supprimer un de ces objets selon une valeur d'attribut.  
     
Par exemple, je veux supprimer du tableau l'objet id 13316.  
24
                
            
                demandé sur
                Simon Arnold
                2010-11-12 18:33:44
            
        5 réponses
Voici l'approche fonctionnelle:
$neededObjects = array_filter(
    $objects,
    function ($e) {
        return $e->id != 13316;
    }
);
  
    	                70
	                    
	                
	                    répondu
	                    erisco
	                    2015-09-09 18:36:07
	                
	            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);
  
    	                4
	                    
	                
	                    répondu
	                    Jacob Relkin
	                    2010-11-12 16:09:34
	                
	            Puisqu'il y a déjà beaucoup de solutions données, je suggère une alternative à l'utilisation du tableau:
$storage = new SplObjectStorage;  // create an Object Collection
$storage->attach($memberObject);  // add an object to it
$storage->detach($memberObject);  // remove that object
  
    vous pouvez en faire une classe personnalisée  MemberCollection  avec des méthodes de recherche et d'autres opérations utilitaires, par exemple  
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);
            }
        }
    }        
}
  
  pourrait être exagéré pour votre scénario cependant.
3
	                    
	                
	                    répondu
	                    Gordon
	                    2010-11-12 16:37:48
	                
	            Use tableau fonction de recherche:
//return array index of searched item
$key = array_search($search_value, array_column($list, 'column_name'));
$list[key]; //return array item
  
    	                2
	                    
	                
	                    répondu
	                    Govind Samrow
	                    2017-08-30 06:07:39
	                
	               foreach ($array as $key=>$value)
      if ($value->id==13316) {
         unset($array[$key]);
         break;
      }
  
    	                0
	                    
	                
	                    répondu
	                    stillstanding
	                    2010-11-12 15:40:25