我有一个数组的城镇,没有任何排序。我想按类别排序,先是省份,然后是区域,并显示每个分组的省及其区域,然后显示其下方的城镇。所以下面的数组:
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任何帮助都将不胜感激。
发布于 2012-08-02 06:34:24
看看uasort()函数:
发布于 2012-08-02 07:42:46
我不认为你可以一步到位地做到这一点。
您可以像这样对您的值进行分组:
$grouped = array();
foreach ($data as $group)
{
$grouped[ $group['category'][3] ][ $group['category'][0] ][ $group['category'][1] ] = array(/* ... */);
}但是您仍然需要使用ksort()对每个数组(以及它的子数组)进行排序。
你应该检查,你是否可以得到已经预先排序的值。例如,如果您使用数据库来检索这些值,那么在数据库中对它们进行排序并将它们放入PHP代码中的正确(分组)结构中将是相当简单的。
发布于 2012-08-03 17:48:52
在遍历数组时,我对要查找的类别使用了一个开关,然后为每个组构建了另一个数组。从那里我可以按地区排序:
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.
}在第二个循环中,可以对区域进行排序。每个省都是在我的页面上的一个列表中手动引用的,这也让我可以控制位置。
然而,这个答案也可以改进。但是上面的工作并不需要太多的努力。
https://stackoverflow.com/questions/11768495
复制相似问题