根据值排序和显示数组值?

时间:2011-01-09 20:55:14

标签: php arrays sorting

鉴于以下 PHP 数组:

Array
(
    [0] => Array
        (
            [name] => Restaurant 123
            [city] => Arlington
            [zip] => 22201
        )

    [1] => Array
        (
            [name] => Bar Foo
            [city] => Ballston
            [zip] => 22201
         )
     [2] => Array
        (
            [name] => Restaurant XYZ
            [city] => Ballston
            [zip] => 22201
         )

    [3] => Array
        (
            [name] => Restaurant 321
            [city] => Washington DC
            [zip] => 22201
         )

)

如何生成按城市排序的列表(按字母顺序排列),以便输出如下内容:

阿灵顿

餐厅123

巴尔斯顿

Bar Foo

餐厅XYZ

华盛顿特区

餐厅321

E.G。,首先按字母顺序按城市名称排序,然后按地点名称排序,也按字母顺序排序。另请注意,没有给出餐馆名称,也没有给出城市按字母顺序排列的数组。

5 个答案:

答案 0 :(得分:2)

编写一个可以传递给usort的回调函数,例如

function compare_venues($a, $b)
{
  return strcmp($a['name'], $b['name']);
}

答案 1 :(得分:2)

您可以使用 usort ,这样您就可以根据用户定义的比较函数对数组进行排序。

答案 2 :(得分:2)

尝试使用usort(http://php.net/manual/en/function.usort.php),您可以在其中定义自定义排序架构,例如

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

答案 3 :(得分:1)

看起来像你想要的两个部分 - 排序和显示。

要进行排序,您希望使用usort定义比较的小函数

$sortFunc = function($a,$b) {return $a['city'] != $b['city'] 
                                 ? $a['city'] > $b['city']
                                 : $a['name'] > $b['name'];};

        // = function($a,$b) {return $a['city'] > $b['city'] || ($a['city'] == $b['city'] && $a['name'] > $b['name']);};
        // = function($a,$b) {return 100*strcmp($a['city'],$b['city']) + strcmp($a['name'],$b['name']);};
usort($arr, $sortFunc);

function displayNamesGroupedByCity($arr)
{
    $lastCity = '';
    foreach($arr as $v)
    {
        if ($v['city'] != $lastCity)
        {
             $lastCity = $v['city'];
             echo "<br /><strong>$lastCity</strong><br />";
        }
        else echo ', ';
        echo $v['name'];
    }
}

displayNamesGroupedByCity($arr);

为了它的地狱,我将使事情变得通用

function displayXgroupedByY($arr, $x, $y)
{
    $sortFunc = function($a,$b) use($x,$y) 
                               {return $a[$y] != $b[$y] 
                                 ? $a[$y] > $b[$y]
                                 : $a[$x] > $b[$y];};

    user($arr, $sortFunc);

    $lastCity = '';
    foreach($arr as $v)
    {
        if ($v['city'] != $lastCity)
        {
             $lastCity = $v['city'];
             echo "<br /><strong>$lastCity</strong><br />";
        }
        else echo ', ';
        echo $v['name'];
    }
    return $arr;
}

displayXGroupedByY($arr, 'name', 'city');

答案 4 :(得分:1)

用户定义的排序应该起作用:

http://us2.php.net/manual/en/function.uasort.php