PHP 二維陣列排序保持鍵名不變

2022-09-05 13:00:12 字數 2366 閱讀 1817

對二維陣列指定的鍵名排序,首先大家想到的是array_multisort函式,關於array_multisort的用法我之前也寫了一篇

廢話不多言,我們看個例項:

<?php
$data = array(

1001 => array(

'age' => 22,

'name' => '鳩摩智'

),1007 => array(

'age' => 21,

'name' => '慕容復'

),1004 => array(

'age' => 27,

'name' => '喬幫主'

));

//

根據欄位age對陣列$data進行公升序排列

細心的朋友會看到,鍵名重置了,鍵名從0開始,顯然這可能不是我們想要的結果,那如何保持鍵名不變?

我們再看個示例:

$data = array

( 1001 => array

( 'age' => 22,

'name' => '鳩摩智'),

1007 => array

( 'age' => 21,

'name' => '慕容復'),

1004 => array

( 'age' => 27,

'name' => '喬幫主')

);//

根據欄位age對陣列$data進行降序排列

$data = arraysort($data, "age", "desc");

print_r($data

);/*

* * @desc arraysort php二維陣列排序 按照指定的key 對陣列進行自然排序

* @param array $arr 將要排序的陣列

* @param string $keys 指定排序的key

* @param string $type 排序型別 asc | desc

* @return array */

function arraysort($arr, $keys, $type = 'asc')

if ($type == 'asc')

if ($type == 'desc')

foreach ($keysvalue

as$k => $v

)

return

$new_array

;}

這裡我們也可以精簡下arraysort函式,處理結果相同:

/*

* * @desc arraysort php二維陣列排序 按照指定的key 對陣列進行自然排序

* @param array $arr 將要排序的陣列

* @param string $keys 指定排序的key

* @param string $type 排序型別 asc | desc

* @return array */

function arraysort($arr, $keys, $type = 'asc')

$type == 'asc' ? asort($keysvalue) : arsort($keysvalue

);

foreach ($keysvalue

as$k => $v

)

return

$new_array

;}

從上面的結果我們看到:

鍵名保持了不變,實現的原理很簡單,先取出鍵名,然後對鍵名排序,再根據對應的鍵名賦值組成新陣列返回。

大家可以看到,這裡我們主要用到了php的幾個核心的排序函式

asort() 對關聯陣列按照鍵值進行公升序排序。

arsort()對關聯陣列按照鍵值進行降序排序。

natsort() 實現了「自然排序」,即數字從

1 到 9

的排序方法,字母從 a 到 z 的排序方法,短的優先。陣列的索引與單元值保持關聯,

注意:在自然排序演算法中,數字

2 小於 數字 10。在計算機排序演算法中,10 小於 2,因為 "10" 中的第乙個數字小於 2。

詳解PHP 二維陣列排序保持鍵名不變

data a 1001 array age 22,name 鳩摩智 1007 array age 21,name 慕容復 1004 array age 27,name 喬幫主 根據欄位age對陣列 dwww.cppcns.comata進行公升序排列 ages array column data,ag...

PHP二維陣列按元素的某個鍵名排序

dbattr array 1 array goods attr id 359,goods id 60,attr id 3 2 array goods attr id 360,goods id 60,attr id 4 3 array goods attr id 366,goods id 60,att...

PHP二維陣列去重(指定鍵名)

本例對二維陣列中某個指定鍵名進行去重,發現網上大多使用array unique或是foreach遍歷等方式去重,效果不佳且較為繁瑣。本文以二維陣列去重為引,介紹array column函式的三種用法。以下是本人常用的去重方法 以指定欄位為索引,自然會把索引欄位中重複的值覆蓋掉,然後在去除關聯索引就可...