2012-08-01 61 views
0

我有一个没有排序的城镇数组。我想按照省份的[类别] [3]和地区的[类别] [0]进行排序,并显示每个分组省及其地区,然后显示其下的城镇。所以,下面的数组:php数组排序和分组

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 

省是主要分组因素,然后按地区分类,没有特定的顺序的城镇,但我猜按字母顺序是有道理的。

我设法按照类别使用此引用对数组进行排序:Sort Multi-dimensional Array by Value但无法想象如何进一步排序,而无需使用名称在循环中专门引用省。即

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

任何帮助,将不胜感激。

+1

写一个比较函数,并用'usort()'http://php.net/manual/en/function.usort.php – alfasin 2012-08-01 22:34:46

回答

0

我不认为你可以一步到位做到这一点。

您可以将自己的价值观是这样的:

$grouped = array(); 

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

但你还是要每个数组排序(和它的子阵列)使用ksort()

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

+0

...不完全是我所采取的,但绝对是最接近的 - 这不能一步完成,使用任何排序功能,然后变得毫无用处。通过遍历数组完成分组,然后输出这些组的结果。 – Innate 2012-08-03 09:37:56

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

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

无论如何,这个答案也可以改善...但上述工作没有太多的努力。