多维数组排序第一和第二

时间:2014-07-25 13:24:46

标签: php

我使用名为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);

工作正常。现在我想按歌曲名称排序第一,艺术家排序第二。所以:如果两个(或更多)的songname-values相同,我想按艺术家排序。就像在SQL中一样:ORDER BY songname,artist。

你有任何想法如何解决它?

1 个答案:

答案 0 :(得分: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");