php中對象轉數組有哪些方法(總結測試)


php中對象轉數組有哪些方法(總結測試)

一、總結

一句話總結:json_decode(json_encode($array),true)和array強制轉換(或帶遞歸)

 

1、array方式強制轉換對象為數組的方式中,屬性的權限不同會有影響么?

結果是對的,但是對象的屬性如果是protected的話,轉換成數組的鍵的時候屬性名前會加上*字符

array(9) {
  ["*questions"] => array(21) { [0] => array(13) { ["bq_id"] => int(28) ["bq_b_id"] => int(5)

這個*是因為我的屬性是protected的,如果屬性換成public,就沒有了

 

2、用(array)方式遞歸轉化解決的問題是什么?

實質是解決對象里還有對象的問題,編碼的話是非常簡單的遞歸

//PHP stdClass Object轉array  
function object_array($array) {  
    if(is_object($array)) {  
        $array = (array)$array;  
    } 
    if(is_array($array)) {
        foreach($array as $key=>$value) {  
            $array[$key] = object_array($value);  
        }  
    }  
    return $array;  
}

 

 

3、json_encode如果不能將對象轉化為json,我們可以怎樣實現目標?

先把對象轉換成數組,然后數組就可以json_encode轉成json了

 

4、目的是獲取對象中的屬性,對象中的影響json_encode的題目數據(包含超級大段中文)其實是不需要的,帶上反而導致無法使用json_encode函數給了我們什么啟示?

關注所需,剔除掉干擾元素

 

 

 

 

二、php中對象轉數組有哪些方法

1、用(array)方式遞歸轉化(實質是解決對象里還有對象的問題)

//PHP stdClass Object轉array  
function object_array($array) {  
    if(is_object($array)) {  
        $array = (array)$array;  
    } 
    if(is_array($array)) {
        foreach($array as $key=>$value) {  
            $array[$key] = object_array($value);  
        }  
    }  
    return $array;  
}

結果是對的,但是對象的屬性如果是protected的話,轉換成數組的鍵的時候屬性名前會加上*字符

array(9) {
  ["*questions"] => array(21) {
    [0] => array(13) {
      ["bq_id"] => int(28)
      ["bq_b_id"] => int(5)

這個*是因為我的屬性是protected的,如果屬性換成public,就沒有了

 

2、轉$xmlString的

$array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE);

 

 

3、json_decode(json_encode($array),true)方式

這個你對象首先能被json_encode才行

4.如果是10W的數據量的話,執行要進1s,結構再復雜些,可以達到3s,性能太差了,可以用以下替換:
function object2array(&$object) {
    $object =  json_decode( json_encode( $object),true);
    return  $object;
}

 

 

4、$arr = (array)$obj方式轉化的效果

如果對象里面沒有對象,這個方法是對的
對象里面還有對象,就得用第一種遞歸的方式將所有的對象都轉換成數組
 

 

參考:PHP中把對象轉數組的幾個方法 - ThinkPHP框架
http://www.thinkphp.cn/code/2903.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM