php中对象转数组有哪些方法(总结测试)
php中对象转数组有哪些方法(总结测试)
一、总结
一句话总结:json_decode(json_encode($array),true)和array强制转换(或带递归)
1、array方式强制转换对象为数组的方式中,属性的权限不同会有影响么?
结果是对的,但是对象的属性如果是protected的话,转换成数组的键的时候属性名前会加上*字符
array(9) {
["*questions"] => array(21) {
[0] => array(13) {
["bq_id"] => int(28)
["bq_b_id"] => int(5)
这个*是因为我的属性是protected的,如果属性换成public,就没有了
2、用(array)方式递归转化解决的问题是什么?
实质是解决对象里还有对象的问题,编码的话是非常简单的递归
//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;
}
3、json_encode如果不能将对象转化为json,我们可以怎样实现目标?
先把对象转换成数组,然后数组就可以json_encode转成json了
4、目的是获取对象中的属性,对象中的影响json_encode的题目数据(包含超级大段中文)其实是不需要的,带上反而导致无法使用json_encode函数给了我们什么启示?
关注所需,剔除掉干扰元素

二、php中对象转数组有哪些方法
1、用(array)方式递归转化(实质是解决对象里还有对象的问题)
//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;
}
结果是对的,但是对象的属性如果是protected的话,转换成数组的键的时候属性名前会加上*字符
array(9) {
["*questions"] => array(21) {
[0] => array(13) {
["bq_id"] => int(28)
["bq_b_id"] => int(5)
这个*是因为我的属性是protected的,如果属性换成public,就没有了
2、转$xmlString的
$array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE);
3、json_decode(json_encode($array),true)方式
这个你对象首先能被json_encode才行
4.如果是10W的数据量的话,执行要进1s,结构再复杂些,可以达到3s,性能太差了,可以用以下替换:
function object2array(&$object) {
$object = json_decode( json_encode( $object),true);
return $object;
}
4、$arr = (array)$obj方式转化的效果
参考:PHP中把对象转数组的几个方法 - ThinkPHP框架
http://www.thinkphp.cn/code/2903.html
php中对象转数组有哪些方法(总结测试)的更多相关文章
- JS中对象转数组方法总结
1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: 'nihao', 1: 'haha', 2: 'ga ...
- JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一 ...
- JavaScript中对象和数组的深拷贝
不管是在面试中还是我们的项目中经常会用到数组或者对象的深拷贝,下面我就自己总结的分享给大家. 首先要知道什么是深拷贝?什么是浅拷贝? 深拷贝:源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另 ...
- javascript中对象和数组的异同点
一.JS声明对象或数组 JS对象:{ } JS数组:[ ] 对象 var b={m:'123',n:'abc'};alert(b.m);alert(b.n); 一维数组 var a=[1,2,3];a ...
- JS的对象、数组等处理方法:解构
对象方法简写 你可以在定义方法时省略function和 :: const obj = { insteadOfThis: function() { // do stuff }, youCanDoThis ...
- JS中对象与数组(大括号{}与中括号[])
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...
- js中字符串和数组相互转化的方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...
- es6中对象转数组,转map
//对象转数组let array = Object.keys(userPermission).map(key=> userPermission[key]) console.log(array) ...
- setData方法修改data中对象或数组的属性值(小程序开发)
今日在开发小程序地图的过程中,遇到一个问题,困扰了我一会 业务如下: 困扰点: 我不知道如何修改data中数组包含的对象是如何修改的:期初的想法还是想共享上面的数据,想的太简单了 正确的解决步骤: 直 ...
随机推荐
- Ubuntu 如何进入系统文件/etc/profile修改内容
转载:https://blog.csdn.net/cfq1491/article/details/81088117 /etc/profile 默认权限为 -rw-r--r-- 即只有root用户可以修 ...
- 大O时间复杂度
大O表示法指出了在最糟情况下的运行时间.比较操作数,指出了算法运行时间的增速 常见的大O运行时间 O(logn):也叫对数时间,包括二分查找 O(n):也叫线性时间,包括简单查找 O(nlogn):包 ...
- Linux文件属性(属主属组权限)
Linux文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. ...
- hdu5137 How Many Maos Does the Guanxi Worth(单源最短路径)
题目链接:pid=5137">点击打开链接 题目描写叙述:如今有一张关系网.网中有n个结点标号为1-n.有m个关系,每一个关系之间有一个权值.问从2-n-1中随意去掉一个结点之后,从1 ...
- CSS W3SCHOOLS
https://www.w3schools.com/csS/css3_buttons.asp
- vue中makeMap方法的使用 (定义注册一些值 后期方便使用)
function makeMap ( str, expectsLowerCase ) { var map = Object.create(null); var list = str.split(',' ...
- exsi主机之间使用scp拷贝文件超时问题
exsi主机之间使用scp拷贝文件直接连接不上报错超时: 解决: 防火墙勾选ssh选项
- python制造模块
制造模块: 方法一: 1.mkdir /xxcd /xx 2.文件包含: 模块名.py setup.py setup.py内容如下:#!/usr/bin/env pythonfrom distutil ...
- 阿里云安装mysql数据库出现2002错误解决办法
在安装数据库的时候出现了如下错误: 解决办法如下: 1.在bin目录下 输入:kill -s 9 9907 再输入:ps -ef|grep mysql 显示如下: 2.回到lampp目录下,重启数据库 ...
- caffe(3) 视觉层及参数
本文只讲解视觉层(Vision Layers)的参数,视觉层包括Convolution, Pooling, Local Response Normalization (LRN)局部相应归一化, im2 ...