0

我有一系列没有任何排序的城镇。我想按省的 [category][3] 排序,然后按地区的 [category][0] 排序,并显示每个分组的省及其地区,然后是其下的城镇。所以下面的数组:

Array
(
    [0] => Array
        (
            [name] => Name One
            [id] => 1
            [link] => http://mylink1.com
            [category] => Array
                (
                    [0] => Region 1
                    [1] => Town 7
                    [2] => Country
                    [3] => Province 2
                )    
        )

    [1] => Array
        (
            [name] => Name Two
            [id] => 2
            [link] => http://mylink2.com
            [category] => Array
                (
                    [0] => Region 1
                    [1] => Town
                    [2] => Country
                    [3] => Province 3
                )    
        )

    [2] => Array
        (
            [[name] => Name Three
            [id] => 3
            [link] => http://mylink3.com
            [category] => Array
                (
                    [0] => Region 1
                    [1] => Town 5
                    [2] => Country
                    [3] => Province 2
                )
        )

    [6] => Array
        (
            [name] => Name Four
            [id] => 4
            [link] => http://mylink4.com
            [category] => Array
                (
                    [0] => Region 1
                    [1] => Town 1
                    [2] => Country
                    [3] => Province 1
                )
        )

)

...最终应该看起来像这样:

Country (all the same)

Province 1
- Region 1
- - Town 1 name, id, link

Province 2
- Region 1
- - Town 5 name, id, link
- - Town 7 name, id, link

Province 3
- Region 1
- - Town 1 name, id, link

省是主要分组因素,然后按地区排序,城镇没有特别的顺序,但我想按字母顺序是有意义的。

我已经设法使用此引用按类别对数组进行排序:按值排序多维数组,但无法理解如何在不使用其名称在循环中专门引用该省的情况下进一步排序。IE

/// shortened version..
foreach($array as $key=>$value)...
   if($value == "Province 1") : do something here with these matches
     ... etc

任何帮助,将不胜感激。

4

3 回答 3

1

看一下 uasort() 函数:

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

于 2012-08-01T22:34:24.313 回答
0

循环遍历数组我为我正在寻找的类别使用了一个开关,然后为每个组构建了另一个数组。从那里我可以按地区排序:

foreach($arr as $town){                             
    switch($town['blogcats']){                                  
        case "Province 1" : $province1[] = $town;
        break;
        case...
        etc
    }
}

然后可以输出每个新的分组数组:

foreach($province1 as $eachtown) {
    echo $newtown['name'];
    ... and so forth.
}

在第二个循环中,可以对 Region 进行排序。每个省都在我的页面上的列表中手动引用,这也让我可以控制位置。

但是,这个答案也可以改进......但上述工作不需要太多努力。

于 2012-08-03T09:48:51.540 回答
0

我不认为你可以一步完成。

您可以像这样对您的值进行分组:

$grouped = array();

foreach ($data as $group)
{
    $grouped[ $group['category'][3] ][ $group['category'][0] ][ $group['category'][1] ] = array(/* ... */);
}

但是您仍然必须使用ksort().

您应该检查是否可以获得已经预先排序的值。例如,如果您正在使用数据库来检索这些值,那么在数据库中对它们进行排序并在 PHP 代码中将它们放入正确的(分组的)结构中将是非常简单的。

于 2012-08-01T23:42:45.890 回答