嗯,直接上个最省事儿的对象转数组的方法:
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还提供了原生的函数处理对象到数组:https://php.net/manual/zh/function.get-object-vars.php
array get_object_vars ( object $obj )
当然,这个也是老大告诉我现在用的框架就是用的这个方法。
后来和许赢提到这个的时候发现呢,上面的方法只能转一层,多层的话,还是需要个函数来搞。遍历检测类型是对象就转换嘛~
参考https://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)."msn";
$a = getCurrentTime();
$arr = get_object_vars($obj);
echo 'get_object_vars:'.(getCurrentTime()-$a)."msn";
$a = getCurrentTime();
$arr = json_decode(json_encode($obj),true);
echo 'json_decode(json_encode:'.(getCurrentTime()-$a)."msn";
$a = getCurrentTime();
$arr = object_array($obj);
echo '(array)-object_array:'.(getCurrentTime()-$a)."msn";
$a = getCurrentTime();
$arr = object_array1($obj);
echo 'get_object_vars-object_array:'.(getCurrentTime()-$a)."msn";
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
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。
留言