Php 在给定属性值的对象数组中查找数组键

Php 在给定属性值的对象数组中查找数组键,php,arrays,object,Php,Arrays,Object,我有这样一个对象数组: Array ( [945] => member Object ( [id] => 13317 [name] => Test 999 [last_name] => Test 999 ) [54] => member Object ( [id] => 13316

我有这样一个对象数组:

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
        )
)
我需要根据属性值删除其中一个对象。

例如,我想从数组中删除对象id 13316。

以下是功能方法:

   foreach ($array as $key=>$value)
      if ($value->id==13316) {
         unset($array[$key]);
         break;
      }
$neededObjects = array_filter(
    $objects,
    function ($e) {
        return $e->id != 13316;
    }
);

由于已经给出了很多解决方案,我建议使用阵列的替代方案:

$storage = new SplObjectStorage;  // create an Object Collection
$storage->attach($memberObject);  // add an object to it
$storage->detach($memberObject);  // remove that object
您可以使用Finder方法和其他实用程序操作将其创建为自定义的
MemberCollection
类,例如

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

谢谢你的回答,我已经编辑了我的答案,我的键没有排序,我的意思是,它们不是0,1,2,3。。。请重新看看我的awnser,我更改了阵列键,thk!如果你用
array\u filter
重新定义你的函数,你会赢得我的支持票:D也许
filter\u by\u key
会是一个更好的名字。@erisco,不管怎样,我按照你的建议将它改为
filter\u by\u key
。我的直觉是,成员是一个值,所以filter_by_成员将返回所有满足基于其值的谓词的成员(只是一个常规过滤器)。另一个惯例是过滤函数通常只排除不满足谓词的内容。这就是为什么我希望看到使用array\u filter重写函数的原因,为什么不呢?因为array\u filter已经预先定义好了,可以执行您需要的操作?dude数组是第一个array\u filter参数,而不是最后一个!完美,值得注意的是,您可以定义类似
函数($e)use($id_to_find){
的闭包,以便能够传递包含要搜索的id的变量。也许我是唯一一个不知道这一点的人;)awome..谢谢:D我使用它来比较数组元素arrayA是否存在于对象数组中。$arrayA=array(14,18,30,50);$neededObjects=array_filter($objects,function($e){返回_数组($e->id,$arrayA);});
//return array index of searched item

$key = array_search($search_value, array_column($list, 'column_name'));

$list[key]; //return array item