PHP对象与数组互相转换

工作中不可避免会遇到php对象与数组的相互转化,下边对其方法做了简单的总结。

1.强制转化

$arr = (array) $obj; $obj = (object) $arr;

优点:比较简洁 缺点:不能递归转化 适用范围:无嵌套数组,无嵌套类的转化

2.自定义方法

object2array ,array2object

/** * 对象转为数组 / function object2array($obj) { $ret = array(); foreach ($obj as $key => $value) { if (gettype($value) == “array” || gettype($value) == “object”){ $ret[$key] = object2array($value); }else{ $ret[$key] = $value; } } return $ret; } /** 数组转对象 */ function array2object($obj){ if( gettype($obj)!=’array’ ) return; foreach($obj as $k=>$v){ if( gettype($v)==’array’ || getType($v)==’object’ ) $obj[$k]=array2object($v); } return (object)$obj; } 优点:可以处理嵌套 缺点:需添加对应函数到系统 适用范围:ALL

3.利用内置函数

json_decode(json_encode($arr), false) json_decode(json_encode($arr), true)

优点:简洁、可处理嵌套 缺点:每次转化都是先执行一次json_encode,再执行一次json_decode,直观判断运行效率会低一些 适用范围:ALL

特别注意:

1.$arr = (array) $obj;这种转换对象的方法,public、private、protected属性都能转化,而其他两种方法则只能转化public属性

2.无论哪种方法都是只转化类的属性,不转化类的方法