2012-06-17 271 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

您可以使用類似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'); 
+0

謝謝你的隊友。有很多數組排序函數,我正在看multisort。 – Michelle

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 
0

請注意usort不保留密鑰。
如果你需要原始密鑰,你應該使用uasort