2014-07-25 109 views
0

我正在使用一個名爲subval_sort的函數對多維數組進行排序。第一個和第二個多維數組排序

function subval_sort($a,$subkey) { 
    foreach($a as $k=>$v) { 
    $b[$k] = strtolower($v[$subkey]); 
    } 
    asort($b); 
    foreach($b as $key=>$val) { 
    $c[] = $a[$key]; 
    } 
    return $c; 
} 

$songs = array(
    '1' => array('artist'=>'Bing Crosby', 'songname'=>'White Christmas'), 
    '2' => array('artist'=>'Elvis Presley', 'songname'=>'White Christmas'), 
    '3' => array('artist'=>'Abba', 'songname' =>'Waterloo') 
); 

$songs = subval_sort($songs,'songname'); 
print_r($songs); 

工作正常。現在我想按歌曲名排序,藝術家排在第二位。所以:如果兩個(或更多)歌曲名稱值相同,我想按藝術家排序。像SQL一樣:ORDER BY歌名,藝術家。

你有什麼想法如何解決它?

回答

1

您可以使用usort在這裏你可以定義自定義比較函數

function cmp($a, $b) 
{ 
    if(strcmp($a['songname'], $b['songname'])) { 
     return strcmp($a['songname'], $b['songname']); 
    } 
    return strcmp($a["artist"], $b["artist"]); 
} 

實現: usort($songs, "cmp");

+1

謝謝!有用! – Kristoffer

相關問題