好像只能以字符串或数字作为数组下标,但目前我需要用对象来标识数组中的一个记录,
并尝试了如下代码:$obj = new myClass();
$my_array[$obj]
但这样做不行,会出现 Warning: Illegal offset type如果在c语言的话,可以取变量的地址,php有没有类似的办法呢?先谢谢了

解决方案 »

  1.   

    使用对象名吧,get_class($obj),php貌似没有这个方法,当然个人觉得也没必要这样用,楼主是啥情况 要这样写代码
      

  2.   


    在用一个html的解析类,其中需要针对解析出来的各个节点计算其子节点(包括孙节点)的个数。计算完后要记录到一个以节点为key、子节点个数为value的数组内,以便能够通过节点迅速查到其子节点的个数。基本就是这个应用,希望记录这么一个表。想了别的办法,一开始打算用html中的id属性来标识节点,但有些html标记没有id,所以找找有没有别的办法
      

  3.   

    如果你想用来当作唯一标识的话
    class A
    {
        public $a = null;    public function b()
        {
            echo 'c';
        }
    }
    $a = new A;
    $a = md5(serialize($a));        // <----
    // 或者
    $a = md5(json_encode($a));      // <----
      

  4.   

    然后用md5返回的字符串$a来当下标
      

  5.   

    这个意思?class tag {
      function __construct() {
        $this->name = get_class($this);
      }
    }
    class img extends tag {}
    class div extends tag {}$ar[serialize(new div)] = 1;
    $ar[serialize(new img)] = 1;print_r($ar);foreach($ar as $k=>$v)
      echo unserialize($k)->name, "=> $v", PHP_EOL;Array
    (
        [O:3:"div":1:{s:4:"name";s:3:"div";}] => 1
        [O:3:"img":1:{s:4:"name";s:3:"img";}] => 1
    )
    div=> 1
    img=> 1
      

  6.   

    我到有个简单的办法$abc = new ABC();
    $array = array();
    $array['abc'] = $abc;6楼的办法是可以实现,但是感觉不是很好,因为如果这个对象的内容很多,那岂不是要消耗很多内存,个人认为,如有不对,还请指教
      

  7.   


    解决问题还是根据需求来做比较好, 你这就是想记录一个node => count的关联关系, 很明显不是node name => count这种映射关系, 你也说了你是想让内存地址作key的, 而不是Node名字, 一个Html里相同node name的结点多了去了。怎么取得一个Node的内存地址就是关键了,序列化/json等等都是一样的,相同内容的Node在处理后还是会冲突的。这里,个人观点:唯一的是路径,也就是DOM层次路径。
    所以,建议是:递归时维护一个路径栈array(push,pop),序列化这个路径array来作为唯一标识。至于你要查找一个node的count,当然要先计算得到node的路径,这个效率太JB低了,怎么办?
    当然是在上面生成关联的递归过程中,将每个NODE的路径存储在NODE的一个属性里了。
      

  8.   

    熟悉spl 开发更轻松.SPL库中的迭代器接口
    SPL提供了6个迭代器接口,如下表
    Traversable 遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口)
    Iterator 迭代器接口(可在内部迭代自己的外部迭代器或类的接口)
    IteratorAggregate 聚合式迭代器接口(创建外部迭代器的接口)
    OuterIterator 迭代器嵌套接口(将一个或多个迭代器包裹在另一个迭代器中)
    RecursiveIterator 递归迭代访问接口(提供递归访问功能)
    SeekableIterator 可索引迭代访问接口(实现查找功能)