2010-09-27 74 views
1

我有一个多维数组现在看起来像这样:排序和输出多维数组

function art_appreciation_feeds() { 
$items = array(
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
); 
return $items; 
} 

对,所以我输出阵列的使用该函数的值:

foreach($items as $i => $row) { 

我正在寻找做的,是另一种价值添加到阵列称为category让我有:

array(
    array('site' => '', 'uri' => '', 'feed' => '', 'category' => ''), 
); 

当我正在通过上面的循环时,按category字段的顺序输出它,每个部分的顶部只有<h2>Category</h2>

这是做到这一点的最好方法,如果是这样,我将如何改变我的循环以适应?警告:如果你认为别的更好,我可以改变阵列。

谢谢!

回答

2

我相信还有更好的方法可以去解决这个问题,并且不确定在你的情况下这是否容易,但只是一个建议。为什么不将该类别作为数组键并将与该类别相关的所有记录作为子数组插入?

例如:

$items['catname1'][] = array('site' => '', 'uri' => '', 'feed' => ''); 
$items['catname2'][] = array('site' => '', 'uri' => '', 'feed' => ''); 
$items['catname1'][] = array('site' => '', 'uri' => '', 'feed' => ''); 

,然后分选基于阵列键?

或者如果你不想添加额外的图层。添加计数器值catname和catname子阵列本身的存储

$items['catname1'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname1'); 
$items['catname2'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname2'); 
$items['catname1'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname1'); 

使用ksort()你应该能够排序的数组键容易等。使用usort()

0

的一种方式,它允许你指定排序功能:

function compareTwoItems($a, $b) 
{ 
    return strcmp($a["category"], $b["category"]); 
} 

usort($items, "compareTwoItems"); 

一旦usort()完成后,项目排序,同一类别是阵列中相邻的所有项目。

如果需要,您可以继续微调您的compareTwoItems()功能 - 例如,做子分类的类别中:

function compareTwoItems($a, $b) 
{ 
    $strcmp = strcmp($a["category"], $b["category"]); 
    if ($strcmp != 0) 
     return $strcmp; 
    else 
     return strcmp($a["site"], $b["site"]); 
} 
+0

不是我是downvoter(这是一个有效的解决方案恕我直言),但** DO **引用您的array_keys! (或者我要开车定义'define('category','site');'只是为了诋毁代码:P) – Wrikken 2010-09-27 22:57:59

+0

好的,我引用了数组键。 – 2010-09-28 13:25:03

0

使用在array_multisort多个或多维数组进行排序。

http://php.net/manual/en/function.array-multisort.php

假设,您有以下多维数组: -

array(
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
); 

假设,上述阵列存储在一个名为变量$数据

// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $category[$key] = $row['category']; 
} 

// Sort the data with category descending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($category, SORT_DESC, $data); 

希望这有助于。