zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php简单对象与数组的转换函数代码(php多层数组和对象的转换)

PHP转换对象数组代码 函数 简单 多层
2023-06-13 09:14:28 时间
复制代码代码如下:

functionarrayToObject($e){
if(gettype($e)!="array")return;
foreach($eas$k=>$v){
if(gettype($v)=="array"||getType($v)=="object")
$e[$k]=(object)arrayToObject($v);
}
return(object)$e;
}

functionobjectToArray($e){
$e=(array)$e;
foreach($eas$k=>$v){
if(gettype($v)=="resource")return;
if(gettype($v)=="object"||gettype($v)=="array")
$e[$k]=(array)objectToArray($v);
}
return$e;
}

上面的内容来自cnblogsjaiho
php多层数组和对象的转换
多层数组和对象转化的用途很简单,便于处理WebService中多层数组和对象的转化
简单的(array)和(object)只能处理单层的数据,对于多层的数组和对象转换则无能为力。
通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得疑虑。

下面上代码:
复制代码代码如下:

<?php

functionobjectToArray($d){
if(is_object($d)){
//Getsthepropertiesofthegivenobject
//withget_object_varsfunction
$d=get_object_vars($d);
}

if(is_array($d)){
/*
*Returnarrayconvertedtoobject
*Using__FUNCTION__(Magicconstant)
*forrecursivecall
*/
returnarray_map(__FUNCTION__,$d);
}
else{
//Returnarray
return$d;
}
}

functionarrayToObject($d){
if(is_array($d)){
/*
*Returnarrayconvertedtoobject
*Using__FUNCTION__(Magicconstant)
*forrecursivecall
*/
return(object)array_map(__FUNCTION__,$d);
}
else{
//Returnobject
return$d;
}
}

//Useage:
//CreatenewstdClassObject
$init=newstdClass;
//Addsometestdata
$init->foo="Testdata";
$init->bar=newstdClass;
$init->bar->baaz="Testing";
$init->bar->fooz=newstdClass;
$init->bar->fooz->baz="Testingagain";
$init->foox="Justtest";

//Convertarraytoobjectandthenobjectbacktoarray
$array=objectToArray($init);
$object=arrayToObject($array);

//Printobjectsandarray
print_r($init);
echo"\n";
print_r($array);
echo"\n";
print_r($object);
?>