利用objmap将多维数组转换成object

相必大家都知道 stdclass 类,这这可看成是php5的一个基类, 提供了类似于数组的调用方法可以通过显式的方法将一个数组转换成stdclass,然后通过用对像的方式访问复制php内容到剪贴板php代码:$a = new stdclass();$a->b = 1;echp $a->b; // output:1// arr->obj$arr = array(a,b);$obj = (object)$arr;

为什么不用数组呢? 对于php来说用数组不是更方便吗?1. 我喜欢用对像的调用方式,写起来方便,顺畅2. 数组是copy值,对像是能过引用的3. 可以实现一些特殊的功能,(全局静态变量,这个以后再说)

但是对于多维数组呢? 我们不能就这样的转换,下面这个类.将会实现这样的方法,至于可以用在什么地方.大家可以发挥复制php内容到剪贴板php代码:$data = array(a1=>array(b1=>b1value,b2=>b2value,b3=>b3value)); $data = new map($data); // obj 取值 echo $data->a1->b1; // output: b1value // obj 赋值 $data->a1->b2 = newb2value; echo .$data->a1->b2; //output: newb2value // array 取值 echo .$data[a1][b3]; //output: b3value // foreach 循环 // output: b1=>b1value b2=>newb2value b3=>b3value foreach($data->a1 as $key=>$val){ echo .$key.=>.$val; }

class map复制php内容到剪贴板php代码:class map extends arrayobject{ // 获取 arrayobject 因子 public function __construct(array $array = array()){ foreach ($array as &$value){ is_array($value) && $value = new self($value); } parent::__construct($array); } // 取值 public function __get($index){ return $this->offsetget($index); } // 赋值 public function __set($index, $value){ is_array($value) && $value = new self($value); $this->offsetset($index, $value); } // 是否存在 public function __isset($index){ return $this->offsetexists($index); } // 删除 public function __unset($index){ $this->offsetunset($index); } // 转换为数组类型 public function toarray(){ $array = $this->getarraycopy(); foreach ($array as &$value){ ($value instanceof self) && $value = $value->toarray(); } return $array; } // 打印成字符 public function __tostring(){ return var_export($this->toarray(), true); } // 根据索引赋值 public function put($index,$value){ is_array($value) && $value = new self($value); $this->offsetset($index, $value); } // 根据索引取值 public function get($index){ return $this->offsetget($index); } }

http://www.bkjia.com/phpjc/508295.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508295.htmltecharticle相必大家都知道 stdclass 类, 这这可看成是php5的一个基类, 提供了类似于数组的调用方法 可以通过显式的方法将一个数组转换成stdclass,然后通…

Posted in 未分类

发表评论