程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 利用ObjMap將多維數組轉換成Object

利用ObjMap將多維數組轉換成Object

編輯:關於PHP編程

相必大家都知道 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 <br>.$data->a1->b2;   //output: newb2value
     // ARRAY 取值
     echo <br>.$data[a1][b3]; //output: b3value
   // FOREACH 循環
     // output: b1=>b1value  b2=>newb2value  b3=>b3value
     foreach($data->a1 as $key=>$val){
      echo <br>.$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);
    }
 
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved