[英]sort a multi-dimensional associative array?
好的,我有一個用於傳輸名稱的數組,它看起來像這樣:
array(2) {
[0]=>
array(3) {
["firstName"]=>
string(3) "Joe"
["lastName"]=>
string(5) "Black"
["uid"]=>
int(3225)
}
[1]=>
array(3) {
["firstName"]=>
string(4) "John"
["lastName"]=>
string(3) "Doe"
["uid"]=>
int(3516)
}
}
現在,我如何按lastName
對此數組進行排序?
StackOverflow有很多類似的問題,但讓我舉個簡單的例子。 為此,您可以使用usort()
函數。
PHP 5.3示例(不是最好的,但可能更容易理解):
uasort($array, function ($i, $j) {
$a = $i['lastName'];
$b = $j['lastName'];
if ($a == $b) return 0;
elseif ($a > $b) return 1;
else return -1;
});
簡短且可重復使用的方法:
usort($array, 'nameSort');
function nameSort($a, $b)
{
return strcmp($a['lastName'], $b['lastName']);
}
我在php.net上發布,你可以使用這個功能:
<?php
function sksort(&$array, $subkey="id", $sort_ascending=false) {
if (count($array))
$temp_array[key($array)] = array_shift($array);
foreach($array as $key => $val){
$offset = 0;
$found = false;
foreach($temp_array as $tmp_key => $tmp_val)
{
if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey]))
{
$temp_array = array_merge( (array)array_slice($temp_array,0,$offset),
array($key => $val),
array_slice($temp_array,$offset)
);
$found = true;
}
$offset++;
}
if(!$found) $temp_array = array_merge($temp_array, array($key => $val));
}
if ($sort_ascending) $array = array_reverse($temp_array);
else $array = $temp_array;
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.