2012-06-17 8 views
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']?

+0

Вы надеетесь на что-то лучшее, чем 'usort'? –

ответ

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

спасибо, друг. Было много функций сортировки массивов, которые я смотрел на мультисортировку. – Michelle

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 
0

Отметьте, что usort не сохраняет ключи.
Если вам нужны оригинальные ключи, вы должны использовать uasort.

Смежные вопросы