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

州は主要なグループ化要素であり、次に地域、町で特定の順序で並べ替えられますが、アルファベット順に意味があると思います。

私はこの参照を使用して配列をカテゴリ別に並べ替えることができました:多次元配列を値で並べ替えますが、名前を使用してループ内で特に州を参照せずに、これ以上並べ替える方法を理解することはできません。すなわち

/// 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.
}

2 番目のループ内で、リージョンで並べ替えを行うことができます。各州は、私のページのリストで手動で参照され、配置を制御することもできます.

ただし、この回答も改善される可能性があります...しかし、上記はあまり努力しなくても機能します。

于 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 に答える