簡體   English   中英

對多維關聯數組進行排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM