好像只能以字符串或数字作为数组下标,但目前我需要用对象来标识数组中的一个记录,
并尝试了如下代码:$obj = new myClass();
$my_array[$obj]
但这样做不行,会出现 Warning: Illegal offset type如果在c语言的话,可以取变量的地址,php有没有类似的办法呢?先谢谢了
并尝试了如下代码:$obj = new myClass();
$my_array[$obj]
但这样做不行,会出现 Warning: Illegal offset type如果在c语言的话,可以取变量的地址,php有没有类似的办法呢?先谢谢了
在用一个html的解析类,其中需要针对解析出来的各个节点计算其子节点(包括孙节点)的个数。计算完后要记录到一个以节点为key、子节点个数为value的数组内,以便能够通过节点迅速查到其子节点的个数。基本就是这个应用,希望记录这么一个表。想了别的办法,一开始打算用html中的id属性来标识节点,但有些html标记没有id,所以找找有没有别的办法
class A
{
public $a = null; public function b()
{
echo 'c';
}
}
$a = new A;
$a = md5(serialize($a)); // <----
// 或者
$a = md5(json_encode($a)); // <----
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
$array = array();
$array['abc'] = $abc;6楼的办法是可以实现,但是感觉不是很好,因为如果这个对象的内容很多,那岂不是要消耗很多内存,个人认为,如有不对,还请指教
解决问题还是根据需求来做比较好, 你这就是想记录一个node => count的关联关系, 很明显不是node name => count这种映射关系, 你也说了你是想让内存地址作key的, 而不是Node名字, 一个Html里相同node name的结点多了去了。怎么取得一个Node的内存地址就是关键了,序列化/json等等都是一样的,相同内容的Node在处理后还是会冲突的。这里,个人观点:唯一的是路径,也就是DOM层次路径。
所以,建议是:递归时维护一个路径栈array(push,pop),序列化这个路径array来作为唯一标识。至于你要查找一个node的count,当然要先计算得到node的路径,这个效率太JB低了,怎么办?
当然是在上面生成关联的递归过程中,将每个NODE的路径存储在NODE的一个属性里了。
SPL提供了6个迭代器接口,如下表
Traversable 遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口)
Iterator 迭代器接口(可在内部迭代自己的外部迭代器或类的接口)
IteratorAggregate 聚合式迭代器接口(创建外部迭代器的接口)
OuterIterator 迭代器嵌套接口(将一个或多个迭代器包裹在另一个迭代器中)
RecursiveIterator 递归迭代访问接口(提供递归访问功能)
SeekableIterator 可索引迭代访问接口(实现查找功能)