php 去掉多维数组的键名,去除多维数组的最外层key 保留值

如果你是要将JSON转成PHP数组,方法如下

首先,你这个数据格式是JSON的,要先转成PHP数组。

$a = json_decode($a, TRUE);

json_decode第二个参数为TRUE表示保留键名,否则JSON转PHP数组之后,PHP数组的键名会重新排序。

然后将你数据中的$a['data']值用array_column处理,或者使用array_values,将数组值重排。

$a['Data'] = array_column($a['Data'], NULL);

// 或者

$a['Data'] = array_values($a['Data']);

如果你是要将PHP转成JSON,但是要使Data中Data为数组[]。

只要在PHP数组中,先按照上面的array_column或者array_values处理过$a['Data'],然后直接运行

$a = json_encode($a);

注意json_encode第二个参数绝对不能用JSON_FORCE_OBJECT,否则还是会使Data变为对象{}。

Update

看了你的代码,我好像是知道你要干啥了,你是想找出原数组里ID值和$makeupId相等的项,然后把它提前到数组第一个?如果是这样你的代码写复杂了。通过array_column()这个神奇的函数,可以轻松实现你的需求。代码如下

$newarr = [];

$ret = array_column($ret, NULL, 'ID');

# 上面这行代码做了一个神奇的事情,就是将源代码的顺序保持不变,然后将ID作为了键值,

# 生成了一个关联数组。

#

# 下面简单讲一下array_column的神奇之处,它可以将像你这种数据格式的

# 二维数组(矩阵型二维数组)中的某一列拆出来,作为键值,另外一列拆出来作为键名,

# 形成关联数组。

#

# 当然,这个函数的定义array_column($source, $value_field[, $key_field]);

# 其中,

# $source为源数组,

# $value_field为需要提取作为键值的名字,如果为NULL则将整个内层数组作为值

# (也就是保持原来的值不变,这个一般用于数组键名的重新生成)

# $key_field为需要提取作为键名的名字,此处为'ID',如果为NULL或者省略,

# 则会重新从0开始编号(配合上面$value_field为NULL可以重新排序数组)

#

# 然后给个简单说明:

# $a = [

# 't' => ['id' => 1, 'name' => 'a'],

# 'u' => ['id' => 2, 'name' => 'b']

# ];

#

# 通过array_column($a, NULL)得到的是

# $a = [

# ['id' => 1, 'name' => 'a'],

# ['id' => 2, 'name' => 'b']

# ];

#

# 通过array_column($a, 'id')得到的是

# $a = [1, 2];

#

# 通过array_column($a, NULL, 'id')得到的是

# $a = [

# 1 => ['id' => 1, 'name' => 'a'],

# 2 => ['id' => 2, 'name' => 'b']

# ];

#

# 通过array_column($a, 'name', 'id')得到的是

# $a = [

# 1 => 'a'

# 2 => 'b'

# ];

# 说了这么多你应该理解了这个函数的用法,上面那句

# $ret = array_column($ret, NULL, 'ID')将$ret变成了关联数组,

# 这样$ret[$makeupId]就可以直接找到你需要提取的项了,是不是很方便?

#

# 下面接着给代码

if(!empty($ret[$makeupId])) {

$newarr = $ret[$makeupId]; // 取出新对象

unset($ret[$makeupId]); // 删除原有数组中的对象

}

$ret = array_column($ret, NULL);

# 上面这行将关联数组再转回了顺序数组,但是别忘了,

# 因为满足$makeupId的项被取到了$newarr,然后原数组中的$makeupId项被删掉,

# 所以转回来的数组是不含满足$makeupId的项的。

# 接下来,将$newarr推到数组之前,

# 此处注意,array_unshift()方法直接操作原数组,所以不需要赋值

array_unshift($ret, $newarr);

代码结束

然后,我再说一下,为什么你用array_values()和array_column()都会使顺序变乱。因为这两个函数都是会重新编号的,而且它编号的顺序,不是你键名的标签顺序,也就是说你键名手动写成0,1,2,3并不会使它重新编号时候按照0,1,2,3排序。它重新编号的顺序取决于你代码运行的顺序。也就是说,你最后那个...[0] = $newarr,其实并不是在数组开头,而是在整个数组的尾部,只是它的键名为0而已,所以你无论怎么努力,这个0对应的元素都是会跑到最后的。

Update 2

上面代码里注释解说比较多,这里贴一下纯代码:

$newarr = [];

$ret = array_column($ret, NULL, 'ID');

if(!empty($ret[$makeupId])) {

$newarr = $ret[$makeupId]; // 取出新对象

unset($ret[$makeupId]); // 删除原有数组中的对象

}

$ret = array_column($ret, NULL);

array_unshift($ret, $newarr);

var_dump($ret);

Update 3

再补充点内容吧,下面是除了array_column的几个可行的解决方案。

方案1:

这个方案基于你原有代码修改。

在你的代码倒数第二行($retlist = ...上面)加上

ksort($ret_list, SORT_NUMERIC);

方案2:

这个方案也是基于你原有代码修改。

将你代码中的$retlist[0] = $newarr;改为array_unshift($retlist, $newarr);

上面已经说过,array_column和array_values都会重新编号,重新编号的顺序取决于你定义对应值的顺序,而并非是键名的数字顺序,所以上面这个修改,是用数组头部推入项替代$retlist[0]的值定义和初始化。

方案3:

这个也是基于你代码修改的。

在你遍历之前,先定义好$retlist[0] = [],然后当你遍历到符合$makeupId项的时候,直接赋值给$retlist[0],这样,由于事先定义了$retlist[0],所以就算重新编号,它的顺序也是在第一个的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装php7的mysql扩展,php7安装mysql扩展的方法是什么

php7安装mysql扩展的方法:1、下载mysql扩展并解压;2、使用phpize工具初始化并进行configure;3、执行【make && make install】命令;4、编辑php.ini文件;5、重启服务。本文环境:windows10系统、php7…

什么是简单的分析SQL注入漏洞

如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的。可是事实是这样吗?我们学这些。不仅要知其然。更要知其所以然!理论联系实际&#x…

python发布服务,Python服务发现:在本地n上发布服务

在本地网络上执行服务通告/发现的一个简单方法是广播UDP包。常数:PORT 50000MAGIC "fna349fn" #to make sure we dont confuse or get confused by other programs公告:from time import sleepfrom socket import socket, AF_INET, SOCK_DGR…

[codevs1262] 不要把球传我 数论+组合数学

没什么好说的,很容易分析出递推公式f[n](n-2)*(n-1)*(n-3) div 6; 代码 beginreadln(n);     writeln((n-2)*(n-1)*(n-3) div 6);end. 巨短,就是这样233() 我不会告诉你这一张是…

php可以用水晶报表吗,什么是水晶报表与水晶报表功能分析

水晶报表水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台做过报表开发的程序员,一定都对水晶报表强大、高效、集成等特性留下了深刻…

大数据笔记11:MapReduce的运行流程

1.基本概念 (1)Job & Task (2)JobTracker (3)TaskTracker转载于:https://www.cnblogs.com/hebao0514/p/4825280.html

php 表格分页代码,[Php]分页及表格样式

writer:web wu 2007/11/29这个分页代码比较简单一些.操作用户列表include "conn.php"; //连接数据库文件mysql_select_db("admin"); //打开数据表$ssqlmysql_query("select count(*) as amcount from alluser",$con); //统计记录数if($my…

iPhone屏幕尺寸、分辨率及适配

目录(?)[-] iPhone尺寸规格单位inch英吋iPhone手机宽高屏幕尺寸像素密度PPI缩放因子scale factor between logic point and device pixel1Scale起源 2UIScreenscale 3UIScreennativeScale 4机型判别Resolutions Rendering2x3x以及高倍图适配12x 23x 3高倍图文件…

oracle中的and用法,Oracle bitand( )函数简介

Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看。Oracle bitand( )函数:返回两个数值型数值在按位进行AND 运算后的结果。语法BITAND(nExpression1, n…

Nagios显示器mysql定从库: libmysqlclient.so.18: cannot open shared object file: No such

做mysql的slave时间监控,必须check_mysql文字,check当误差:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory1,错误信息例如以下:[rootslave…

oracle包如何进入编辑,修改 Oracle 的process和Session

1.process 和session的概念:process:这个参数限制了能够连接到SGA的操作系统进程数(或者是Windows 系统中的线程数),这个总数必须足够大,从而能够适用于后台进程与所有的专用服务器进程,此外,共享服务器进程与调度进程的数目也被计算在内.此外,共享 服务器进程与调度进程的数目…

Head First Python学习笔记4——处理数据

有这么几组数据需要你处理: James  2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22 Julia   2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21 Mikey  2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38 Sarah  2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55 这…

oracle ora 00910,NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype

NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype前几天在IMP的时候遇到了个问题:IMP-00017: following statement failed with ORACLE error 910:"CREATE TABLE "T_CSL_DYNAITEMDATAENTRY" ("FID&quo…

Swift - 触摸事件(点击,移动,抬起等)说明及用例

在iOS开发中,UIGestureRecognizer可以方便的响应处理手势事件。 而如果要想更精细的处理,我们还需要借助touchesBegan,touchesMoved,touchesEnded等触摸方法。这些方法 都是UIResponder中的方法。视图控制器和视图类,都…

鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...

本文实例讲述了jQuery实现的响应鼠标移动方向插件用法。分享给大家供大家参考,具体如下:HTML代码如下:www.jb51.net jQuery响应鼠标移动*{margin:0;padding:0;}ul,li{list-style:none;}div{font-family:"Microsoft YaHei";}html,bo…

读《大道至简—是懒人造就了方法 》有感

读了大道至简第一章编程的精义之后,我觉得感触颇深,于是乎我又读了第二章是懒人造就了方法 ,之后果然没有让我失望,第二章写的也是非常的好,非常的吸引我。 第二章的开头便引用了李冰凿山的故事,在战国时代…

《大道至简》第二篇读后感

今天把周爱民大道至简的第二章关于是懒人造就了方法读了几遍,作者通过战国时李冰凿山与愚公移山的比较来阐述懒人早就方法主题,以前听历史老师讲课的时候正是因为懒人才会有那么多可以节省人们力气和时间的发明,但懒人并不是真的懒&#xff0…

oracle备份磁盘头,ASM 磁盘头信息备份

ASM磁盘头信息保存在每个磁盘的前4K里面,这个信息的备份对于ASM的恢复非常重要,有下面的几种方法1.直接做dd来备份磁盘的前4K,磁盘头信息丢失时,dd回来 备份:dd if/dev/raw/raw1 of/gyj/asmheader.dd bs4096 coun…

var s=+newDate();的用法,表示对应的时间截

var snewDate(); var snewDate(); 解释如下:是不存在的; new Date()是一个东西; 相当于.valueOf(); 看到回复补充一下.getTime()这个也是得到毫秒数 //4个结果一样返回当前时间的毫秒数alert(new Date());alert(new Date);var snew Date();alert(s.valueOf()); alert(s.getTime…

asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼tblnamerequest("tb")Dim objOraSession,objOraDbDim strDbUser,strDbPwd,strDbConnCall ConnectDB()Sub ConnectDB() 连接数据库On Error Resume NextstrDbUser "liujincai" 连接用户名strDbPwd "ljc1…