0

例如,您有一个数组:

$unsorted = array(
    'desert' => array(
        'time' => '1339902235',
        'name' => 'desert.jpg'
    ),
    'sea' => array(
        'time' => '1339900801',
        'name' => 'sea.jpg'
    ),
    'mountain' => array(
        'time' => '1339902285',
        'name' => 'mountain.jpg'
    ),
);

是否可以按 的值对数组进行排序$unsorted[$a]['time']

4

3 回答 3

5

您可以使用类似usort和的东西strnatcasecmp

例如:

function sort_2d_asc($array, $key) {
    usort($array, function($a, $b) use ($key) {
        return strnatcasecmp($a[$key], $b[$key]);
    });

    return $array;
}

function sort_2d_desc($array, $key) {
    usort($array, function($a, $b) use ($key) {
        return strnatcasecmp($b[$key], $a[$key]);
    });

    return $array;
}

$unsorted = array(
    'desert' => array(
        'time' => '1339902235',
        'name' => 'desert.jpg'
    ),
    'sea' => array(
        'time' => '1339900801',
        'name' => 'sea.jpg'
    ),
    'mountain' => array(
        'time' => '1339902285',
        'name' => 'mountain.jpg'
    ),
);

$sorted = sort_2d_asc($unsorted, 'time');
于 2012-06-17T03:44:54.053 回答
0

请注意,usort它不会保留密钥。
如果您需要原始密钥,您应该使用uasort.

于 2012-07-20T20:02:17.270 回答
0

您可以使用usort. usort将回调作为参数。还将时间转换为整数,因为它们就是这样。

function compare($a,$b) {
     if( $a['time'] == $b['time'] ) {
         return 0;
     }

     return (intval($a['time']) < intval($b['time'])) ? -1 : 1;
}

usort( $unsorted, 'compare' );

// $unsorted is now sorted by time
于 2012-06-17T03:48:53.970 回答