PHP实现数组和对象的相互转换操作示例


Posted in PHP onMarch 20, 2019

本文实例讲述了PHP实现数组和对象的相互转换操作。分享给大家供大家参考,具体如下:

关于php中想让对象以数组的形式访问,这时候就需要使用到get_object_vars()函数了。先来介绍一下这个函数。

官方文档是这样解释的:

array get_object_vars ( object $obj )

返回由 obj 指定的对象中定义的属性组成的关联数组。

举一个栗子:

<?php
class Point2D {
  var $x, $y;
  var $label;
  function Point2D($x, $y)
  {
    $this->x = $x;
    $this->y = $y;
  }
  function setLabel($label)
  {
    $this->label = $label;
  }
  function getPoint()
  {
    return array("x" => $this->x,
           "y" => $this->y,
           "label" => $this->label);
  }
}
// "$label" is declared but not defined
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));
$p1->setLabel("point #1");
print_r(get_object_vars($p1));
?>

会输出:

Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] =>
 )
 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] => point #1
 )

这样就很好理解了,这个函数就是对象转数组的关键函数。

对象转数组具体实现

function objectToArray($obj) {
  //首先判断是否是对象
  $arr = is_object($obj) ? get_object_vars($obj) : $obj;
  if(is_array($arr)) {
    //这里相当于递归了一下,如果子元素还是对象的话继续向下转换
    return array_map(__FUNCTION__, $arr);
  }else {
    return $arr;
  }
}

数组转对象具体实现

function arrayToObject($arr) {
  if(is_array($arr)) {
    return (object)array_map(__FUNCTION__, $arr);
  }else {
    return $arr;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP设计聊天室步步通
Oct 09 PHP
[转帖]PHP世纪万年历
Dec 06 PHP
用php解析html的实现代码
Aug 08 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php目录操作实例代码
Feb 21 PHP
php实现建立多层级目录的方法
Jul 19 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
php调用shell的方法
Nov 05 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 PHP
PHP数组实际占用内存大小原理解析
Dec 11 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 #PHP
PHP工厂模式的日常使用
Mar 20 #PHP
PHP函数积累总结
Mar 19 #PHP
PHP与Perl之间知识点区别整理
Mar 19 #PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 #PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 #PHP
php+ajax 文件上传代码实例
Mar 18 #PHP
You might like
php下目前为目最全的CURL中文说明
2010/08/01 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
php实现rc4加密算法代码
2012/04/25 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
js鼠标左右键 键盘值小结
2010/06/11 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Python函数生成器原理及使用详解
2020/03/12 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
软件测试面试题
2015/10/21 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
历史系自荐信范文
2013/12/24 职场文书
事业单位考核材料
2014/05/21 职场文书
工程项目经理任命书
2014/06/05 职场文书
篮球比赛口号
2014/06/10 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
工程部岗位职责范本
2015/04/11 职场文书
关于军训的感想
2015/08/07 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers