日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 去掉多维数组的键名,去除多维数组的最外层key 保留值 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果你是要將JSON轉(zhuǎn)成PHP數(shù)組,方法如下

首先,你這個(gè)數(shù)據(jù)格式是JSON的,要先轉(zhuǎn)成PHP數(shù)組。

$a = json_decode($a, TRUE);

json_decode第二個(gè)參數(shù)為TRUE表示保留鍵名,否則JSON轉(zhuǎn)PHP數(shù)組之后,PHP數(shù)組的鍵名會(huì)重新排序。

然后將你數(shù)據(jù)中的$a['data']值用array_column處理,或者使用array_values,將數(shù)組值重排。

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

// 或者

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

如果你是要將PHP轉(zhuǎn)成JSON,但是要使Data中Data為數(shù)組[]。

只要在PHP數(shù)組中,先按照上面的array_column或者array_values處理過(guò)$a['Data'],然后直接運(yùn)行

$a = json_encode($a);

注意json_encode第二個(gè)參數(shù)絕對(duì)不能用JSON_FORCE_OBJECT,否則還是會(huì)使Data變?yōu)閷?duì)象{}。

Update

看了你的代碼,我好像是知道你要干啥了,你是想找出原數(shù)組里ID值和$makeupId相等的項(xiàng),然后把它提前到數(shù)組第一個(gè)?如果是這樣你的代碼寫(xiě)復(fù)雜了。通過(guò)array_column()這個(gè)神奇的函數(shù),可以輕松實(shí)現(xiàn)你的需求。代碼如下

$newarr = [];

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

# 上面這行代碼做了一個(gè)神奇的事情,就是將源代碼的順序保持不變,然后將ID作為了鍵值,

# 生成了一個(gè)關(guān)聯(lián)數(shù)組。

#

# 下面簡(jiǎn)單講一下array_column的神奇之處,它可以將像你這種數(shù)據(jù)格式的

# 二維數(shù)組(矩陣型二維數(shù)組)中的某一列拆出來(lái),作為鍵值,另外一列拆出來(lái)作為鍵名,

# 形成關(guān)聯(lián)數(shù)組。

#

# 當(dāng)然,這個(gè)函數(shù)的定義array_column($source, $value_field[, $key_field]);

# 其中,

# $source為源數(shù)組,

# $value_field為需要提取作為鍵值的名字,如果為NULL則將整個(gè)內(nèi)層數(shù)組作為值

# (也就是保持原來(lái)的值不變,這個(gè)一般用于數(shù)組鍵名的重新生成)

# $key_field為需要提取作為鍵名的名字,此處為'ID',如果為NULL或者省略,

# 則會(huì)重新從0開(kāi)始編號(hào)(配合上面$value_field為NULL可以重新排序數(shù)組)

#

# 然后給個(gè)簡(jiǎn)單說(shuō)明:

# $a = [

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

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

# ];

#

# 通過(guò)array_column($a, NULL)得到的是

# $a = [

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

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

# ];

#

# 通過(guò)array_column($a, 'id')得到的是

# $a = [1, 2];

#

# 通過(guò)array_column($a, NULL, 'id')得到的是

# $a = [

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

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

# ];

#

# 通過(guò)array_column($a, 'name', 'id')得到的是

# $a = [

# 1 => 'a'

# 2 => 'b'

# ];

# 說(shuō)了這么多你應(yīng)該理解了這個(gè)函數(shù)的用法,上面那句

# $ret = array_column($ret, NULL, 'ID')將$ret變成了關(guān)聯(lián)數(shù)組,

# 這樣$ret[$makeupId]就可以直接找到你需要提取的項(xiàng)了,是不是很方便?

#

# 下面接著給代碼

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

$newarr = $ret[$makeupId]; // 取出新對(duì)象

unset($ret[$makeupId]); // 刪除原有數(shù)組中的對(duì)象

}

$ret = array_column($ret, NULL);

# 上面這行將關(guān)聯(lián)數(shù)組再轉(zhuǎn)回了順序數(shù)組,但是別忘了,

# 因?yàn)闈M足$makeupId的項(xiàng)被取到了$newarr,然后原數(shù)組中的$makeupId項(xiàng)被刪掉,

# 所以轉(zhuǎn)回來(lái)的數(shù)組是不含滿足$makeupId的項(xiàng)的。

# 接下來(lái),將$newarr推到數(shù)組之前,

# 此處注意,array_unshift()方法直接操作原數(shù)組,所以不需要賦值

array_unshift($ret, $newarr);

代碼結(jié)束

然后,我再說(shuō)一下,為什么你用array_values()和array_column()都會(huì)使順序變亂。因?yàn)檫@兩個(gè)函數(shù)都是會(huì)重新編號(hào)的,而且它編號(hào)的順序,不是你鍵名的標(biāo)簽順序,也就是說(shuō)你鍵名手動(dòng)寫(xiě)成0,1,2,3并不會(huì)使它重新編號(hào)時(shí)候按照0,1,2,3排序。它重新編號(hào)的順序取決于你代碼運(yùn)行的順序。也就是說(shuō),你最后那個(gè)...[0] = $newarr,其實(shí)并不是在數(shù)組開(kāi)頭,而是在整個(gè)數(shù)組的尾部,只是它的鍵名為0而已,所以你無(wú)論怎么努力,這個(gè)0對(duì)應(yīng)的元素都是會(huì)跑到最后的。

Update 2

上面代碼里注釋解說(shuō)比較多,這里貼一下純代碼:

$newarr = [];

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

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

$newarr = $ret[$makeupId]; // 取出新對(duì)象

unset($ret[$makeupId]); // 刪除原有數(shù)組中的對(duì)象

}

$ret = array_column($ret, NULL);

array_unshift($ret, $newarr);

var_dump($ret);

Update 3

再補(bǔ)充點(diǎn)內(nèi)容吧,下面是除了array_column的幾個(gè)可行的解決方案。

方案1:

這個(gè)方案基于你原有代碼修改。

在你的代碼倒數(shù)第二行($retlist = ...上面)加上

ksort($ret_list, SORT_NUMERIC);

方案2:

這個(gè)方案也是基于你原有代碼修改。

將你代碼中的$retlist[0] = $newarr;改為array_unshift($retlist, $newarr);

上面已經(jīng)說(shuō)過(guò),array_column和array_values都會(huì)重新編號(hào),重新編號(hào)的順序取決于你定義對(duì)應(yīng)值的順序,而并非是鍵名的數(shù)字順序,所以上面這個(gè)修改,是用數(shù)組頭部推入項(xiàng)替代$retlist[0]的值定義和初始化。

方案3:

這個(gè)也是基于你代碼修改的。

在你遍歷之前,先定義好$retlist[0] = [],然后當(dāng)你遍歷到符合$makeupId項(xiàng)的時(shí)候,直接賦值給$retlist[0],這樣,由于事先定義了$retlist[0],所以就算重新編號(hào),它的順序也是在第一個(gè)的。

總結(jié)

以上是生活随笔為你收集整理的php 去掉多维数组的键名,去除多维数组的最外层key 保留值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。