嗯,直接上个最省事儿的对象转数组的方法:

json_decode(json_encode($object),true);

2018.1.5
= =经过浩哥指点,这种转换方法很蠢,很慢。当时看了几个封装成函数的,觉得没有这种一句话简洁,所以就没考虑太多放了上来。虽然功能是实现了,但是距离真正项目应用还差了很远。

直到看到Stack Overflow,老大也给了连接:https://stackoverflow.com/questions/4345554/convert-php-object-to-associative-array,强制类型转换就可以了:

$array =  (array) $yourObject;

懒惰是程序员的特性,但不应该因为懒惰就降低了探索的深度。作为程序员,有谷歌别用百度,真心的。还好老大及时指出了,要不这傻逼方法要真用到项目里就丢人了,哈哈哈哈哈。

同样,PHP还提供了原生的函数处理对象到数组:http://php.net/manual/zh/function.get-object-vars.php

array get_object_vars ( object $obj )

当然,这个也是老大告诉我现在用的框架就是用的这个方法。

后来和许赢提到这个的时候发现呢,上面的方法只能转一层,多层的话,还是需要个函数来搞。遍历检测类型是对象就转换嘛~

参考http://www.thinkphp.cn/code/2903.html 现成函数:

//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;
}

然后不放心呐,就写个脚本自己验证下测试转换效率,最终结论,json的那个确实是最慢的~

测试脚本如下:

<?php
$c = '{"action":"texttoaction","param":{';
for($i = 0;$i <= 10;$i++ ){for($j = 1;$j <= 33333;$j++){$c.='"'.($j+33333*$i).'":"'.($j+33333*$i).'",';}}
$c = substr($c,0,-1);
$c.='}}';#json的字符串
$obj = json_decode($c);#转成一个大对象
$a = getCurrentTime();
$arr = (array) $obj;
echo '(array):'.(getCurrentTime()-$a)."ms\n";
$a = getCurrentTime();
$arr = get_object_vars($obj);
echo 'get_object_vars:'.(getCurrentTime()-$a)."ms\n";
$a = getCurrentTime();
$arr = json_decode(json_encode($obj),true);
echo 'json_decode(json_encode:'.(getCurrentTime()-$a)."ms\n";
$a = getCurrentTime();
$arr = object_array($obj);
echo '(array)-object_array:'.(getCurrentTime()-$a)."ms\n";
$a = getCurrentTime();
$arr = object_array1($obj);
echo 'get_object_vars-object_array:'.(getCurrentTime()-$a)."ms\n";

function getCurrentTime (){
    list ($msec, $sec) = explode(" ", microtime());
    return floor(((float)$msec + (float)$sec)*1000);
}
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;
}
function object_array1($array) {
    if(is_object($array)) {
        $array = get_object_vars($array);
    } 
    if(is_array($array)) {
        foreach($array as $key=>$value) {
            $array[$key] = object_array1($value);
        }
    }
    return $array;
}

测试结果输出:

json_decode(json_encode:93ms
(array)-object_array:70ms
get_object_vars-object_array:70ms

Related Posts: PHP中把对象转数组方法 :

avatar