php二維數(shù)組按其中一列字符串長(zhǎng)度排序
PHP一維數(shù)組排序比較簡(jiǎn)單,使用asort、ksort等一些方法進(jìn)行排序就可以了。PHP二維數(shù)組排序就相對(duì)難一點(diǎn),必須使用array_multisort和usort來(lái)實(shí)現(xiàn)
下面舉個(gè)例子
假設(shè)數(shù)組:
$users = array(
array('name' => 'tom', 'age' => 20),
array('name' => 'anny', 'age' => 18),
array('name' => 'jack', 'age' => 22)
);
想要按age從小到大排序。方法如下:
一、使用array_multisort排序
原理:將age提取出來(lái)存儲(chǔ)到一維數(shù)組里,然后按照age升序排列。
具體代碼:
$ages = array();
foreach ($users as $user) {
$ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);
運(yùn)行后,$users就是排序好的數(shù)組了。如果需要先按年齡升序排列,再按照名稱(chēng)升序排列,方法同上,就是多提取一個(gè)名稱(chēng)數(shù)組出來(lái),再進(jìn)行排序
調(diào)用方法:
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);
二、使用usort
這個(gè)方法最大的好處就是可以自定義一些相對(duì)復(fù)雜點(diǎn)的排序方法。例如按照name的長(zhǎng)度降序排序:
具體代碼:
usort($users, function($a, $b) {
$al = strlen($a['name']);
$bl = strlen($b['name']);
if ($al == $bl)
return 0;
return ($al > $bl) ? -1 : 1;
});
這里使用了匿名函數(shù),如果有需要也可以單獨(dú)提取出來(lái)。其中$a, $b可以理解為$users數(shù)組下的元素,可以直接索引name值,并計(jì)算長(zhǎng)度,而后比較長(zhǎng)度就可以了。
中國(guó)· 上海

關(guān)鍵詞
辦公室:上海市浦東新區(qū)郭守敬路351號(hào)
CopyRight?2009-2019 上海谷谷網(wǎng)絡(luò)科技有限公司 All Rights Reserved. 滬ICP備11022482號(hào)-8
- top
- 在線咨詢
-
添加微信咨詢