php数组和对象,php中数组和对象互转换的方法

上午在做一个php项目时,遇到了一个对象与数组之间相互转换的问题,就随手写了两个关于对象转数组,数组转对象的自定义函数,记录一下,分享有需要的童鞋。

php 数组转对象的函数

函数代码:<?php

function arr_to_obj($arr){

$obj = null;

if (is_array($arr)) {

$obj = new StdClass();

foreach ($arr as $key => $a){

$obj->$key = $a;

}

}

if (is_object($arr)){

$obj = $arr;

}

return $obj;

}

?>

函数调用方法:<?php

//这是一个数组

$arr = array('name' => '小明','sex' => 16);

$obj = arr_to_obj($arr);

echo $obj->name;

// 输出结果: 小明

?>

注:

stdClass类是一个没有成员变量也没有成员方法的类,它所有的魔术方法,父类、接口等在初始化时都被设置成NULL。由于在PHP中对于一个类我们无法动态的添加方法, 所以这个类只能用来处理动态属性,这也是我们一种常见的用法。

php 对象转数组的函数

函数代码:<?php

function obj_to_arr($obj){

$array = array();

if (is_object($obj)){

foreach ($obj as $key => $a) {

$array[$key] = $a;

}

}

if(is_array($obj)){

$array = $obj;

}

return $array;

}

?>

函数调用:<?php

//创建一个类,并添加对象

$obj = new StdClass();

$obj->Name = '飞鸟慕鱼博客';

$obj->Host = 'http://www.feiniaomy.com';

$arr = obj_to_arr($obj);

var_dump($arr);

?>

输出结果:array(2) {

["Name"]=>

string(18) "飞鸟慕鱼博客"

["Host"]=>

string(24) "http://www.feiniaomy.com"

}

补充说明:

is_object():用于检测变量是否是一个对象。

is_array():用于检测变量是否是一个数组

系统函数数组与对象的互转

1、对象转数组<?php

$obj = new StdClass();

$obj->Name = '小红';

$obj->Sex = '16';

//这里开始转换

// json_encode() 函数的第二个参数true

$arr = json_decode(json_encode($obj),true);

var_dump($arr);

?>

打印结果:array(2) {

["Name"]=>

string(6) "小红"

["Sex"]=>

string(2) "16"

}

2、数组转对象<?php

$arr = array('id'=>1,'name'=>'aaa');

// json_encode() 函数的第二个参数未设置,默认为 false

$obj = json_decode(json_encode($arr));

var_dump($obj);

?>

打印结果:object(stdClass)#3 (2) {

["id"]=>

int(1)

["name"]=>

string(3) "aaa"

}

php 数组与对象互转的其它方法<?php

/**

* 数组 TO 对象

* 飞鸟慕鱼博客

* @param array $arr 数组

* @return object

*/

function arrayToObject($arr) {

if (gettype($arr) != 'array') {

return;

}

foreach ($arr as $k => $v) {

if (gettype($v) == 'array' || getType($v) == 'object') {

$arr[$k] = (object)arrayToObject($v);

}

}

return (object)$arr;

}

/**

* 对象 TO 数组

* 飞鸟慕鱼博客

* @param object $obj 对象

* @return array

*/

function objectToArray($obj) {

$obj = (array)$obj;

foreach ($obj as $k => $v) {

if (gettype($v) == 'resource') {

return;

}

if (gettype($v) == 'object' || gettype($v) == 'array') {

$obj[$k] = (array)objectToArray($v);

}

}

return $obj;

}

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值