PHP:从数组删除对象 [英] PHP : Remove object from array

查看:170
本文介绍了PHP:从数组删除对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

什么是优雅的方式,从物体在PHP数组?

删除对象

只是要清楚..

 类数据{  私人$ arrObservers;  公共插件(观察员$ O){
    array_push($这个 - > arrObservers,$ O);
  }
  公共删除(观察员$ O){
    //我需要这个code,从这个 - $&GT删除$ O; arrObservers
  }}


解决方案

您可以做

 函数unsetValue(数组$阵列,价值$,$严格= TRUE)
{
    如果(($键= array_search(价值$,$数组$严格))!== FALSE){
        未设置($数组[$关键]);
    }
    返回$阵列;
}

您也可以使用 spl_object_hash 来创建对象的哈希并用其作为数组键。

不过,PHP也有对象集合与 SplObjectStorage <本地数据结构/ code>

  $ a =新一个StdClass; $ A-和SEQ ID = 1;
$ B =新一个StdClass; $ B-和SEQ ID = 2;
$ C =新一个StdClass; $ C-和SEQ ID = 3;$存储=新SplObjectStorage;
$存储 - &GT;附加($ A);
$存储 - &GT;附加($ B);
$存储 - &GT;附加($ C);
回声$存储 - &GT;计数(); // 3//尝试重新连接同一个对象
$存储 - &GT;附加($ C);
回声$存储 - &GT;计数(); //还是3后续代码var_dump($存储 - &GT;包含($ B)); // TRUE
$存储 - &GT;分离($ B);
后续代码var_dump($存储 - &GT;包含($ B)); // FALSE

SplObjectStorage Traversable的,这样你就可以的foreach 过它。

在阿里纳斯,PHP也有主题并的Observer

What is an elegant way to remove an object from an array of objects in PHP ?

Just to be clear ..

class Data{

  private $arrObservers;

  public add(Observer $o) {  
    array_push($this->arrObservers, $o);  
  }    
  public remove(Observer $o) {  
    // I NEED THIS CODE to remove $o from $this->arrObservers
  }  

}

解决方案

You can do

function unsetValue(array $array, $value, $strict = TRUE)
{
    if(($key = array_search($value, $array, $strict)) !== FALSE) {
        unset($array[$key]);
    }
    return $array;
}

You can also use spl_object_hash to create a hash for the objects and use that as array key.

However, PHP also has a native Data Structure for Object collections with SplObjectStorage:

$a = new StdClass; $a->id = 1;
$b = new StdClass; $b->id = 2;
$c = new StdClass; $c->id = 3;

$storage = new SplObjectStorage;
$storage->attach($a);
$storage->attach($b);
$storage->attach($c);
echo $storage->count(); // 3

// trying to attach same object again
$storage->attach($c);
echo $storage->count(); // still 3

var_dump( $storage->contains($b) ); // TRUE
$storage->detach($b);
var_dump( $storage->contains($b) ); // FALSE

SplObjectStorage is Traversable, so you can foreach over it as well.

On a sidenote, PHP also has native interfaces for Subject and Observer.

这篇关于PHP:从数组删除对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆