杨振峰网站开发,怎么发布自己做的网站,网站建设it,邢台网站建设报价多少钱如果你是要将JSON转成PHP数组#xff0c;方法如下首先#xff0c;你这个数据格式是JSON的#xff0c;要先转成PHP数组。$a json_decode($a, TRUE);json_decode第二个参数为TRUE表示保留键名#xff0c;否则JSON转PHP数组之后#xff0c;PHP数组的键名会重新排序。然后将你…如果你是要将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]所以就算重新编号它的顺序也是在第一个的。