對二維陣列指定的鍵名排序,首先大家想到的是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這裡我們也可以精簡下arraysort函式,處理結果相同:( 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
;}
/*從上面的結果我們看到:* * @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函式的三種用法。以下是本人常用的去重方法 以指定欄位為索引,自然會把索引欄位中重複的值覆蓋掉,然後在去除關聯索引就可...