基于数组值对数组进行排序

时间:2012-06-17 03:40:51

标签: php arrays sorting

对于一个实例,你有一个数组:

$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']

的值对数组进行排序

3 个答案:

答案 0 :(得分:5)

您可以使用usortstrnatcasecmp等内容。

例如:

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');

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

请注意,usort不保留密钥 如果您需要原始密钥,请使用uasort