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
