php數組與對象相互轉換方法
來源:程序員人生 發布時間:2013-11-17 16:18:37 閱讀次數:2582次
php數組與對象相互轉換方法
- function arrayToObject($e){
- if( gettype($e)!='array' ) return;
- foreach($e as $k=>$v){
- if( gettype($v)=='array' || getType($v)=='object' )
- $e[$k]=(object)arrayToObject($v);
- }
- return (object)$e;
- }
-
- function objectToArray($e){
- $e=(array)$e;
- foreach($e as $k=>$v){
- if( gettype($v)=='resource' ) return;
- if( gettype($v)=='object' || gettype($v)=='array' )
- $e[$k]=(array)objectToArray($v);
- }
- return $e;
- }
關于數組轉換為對象,在phpx有看到一些帖子討論.
- $andy = array();
- $andy['a'] = 1;
- $andy['b'] = 2;
- $andy['c'] = 3;
把andy強制轉換為數組,似乎引用的方便些了,主要是變成了->
- $andy = array();
- $andy = (object)$andy;
- $andy->a = 1;
- $andy->b = 2;
- $andy->c = 3;
還嫌它麻煩,再用StdClass
- $andy = new StdClass;
- $andy->a = 1;
- $andy->b = 2;
- $andy->c = 3;
stdClass 是PHP的一個基類,所有的類幾乎都繼承這個類,所以任何時候都可以被new,可以讓這個變量成為一個object,同時,這個基類又有一個特殊的地方,就是沒有方法,在這里,還有一點是對象和數組資源耗費的問題:PHP5的對象的獨特性,對象在任何地方被調用,都是引用地址型的,所以相對消耗的資源會少一 點,在其它頁面為它賦值時是直接修改,而不是引用一個拷貝,數組在程序的使用中應該是最方便的,然而數組的每次被引用($a = $b),其實都是創建了一個副本,而且,數組被unset后,還是占用了內存(沒有測試過),還有一個函數arrayobject,可以直接將數組轉化為 對象這也是一個好辦法.
- ArrayObject::__construct -- Construct a new array object
- <?php
- $array = array('1' => 'one',
- '2' => 'two',
- '3' => 'three');
- $arrayobject = new ArrayObject($array);
- print_r($arrayobject);
- ?>
- ArrayObject Object
- (
- [1] => one
- [2] => two
- [3] => three
- )
試驗了一下對象轉換為數組,也可以強制轉換:
$arr = (array)$obj;
如下例子轉換結果,可對比:
- Tag Object
- (
- [name] => main
- [text] =>
- [parrent] =>
- [content] =>
- [props] => Array
- (
- )
-
- [inner] => Array
- (
- )
-
- [level] => 0
- )
-
- Array
- (
- [name] => main
- [text] =>
- [parrent] =>
- [content] =>
- [props] => Array
- (
- )
-
- [inner] => Array
- (
- )
-
- [level] => 0
- )
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈