排序和输出多维数组

时间:2010-09-27 20:58:24

标签: php multidimensional-array

我现在有一个多维数组,如下所示:

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>

这是执行此操作的最佳方式吗?如果是这样,我将如何更改循环以适应这种情况?警告:如果您认为其他更好的东西,我也可以更改阵列。

谢谢!

3 个答案:

答案 0 :(得分: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()您应该可以轻松地对数组键进行排序。

答案 1 :(得分:0)

一种方法是使用usort(),它允许您指定排序函数:

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"]);
}

答案 2 :(得分: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'),
);

假设上述数组存储在名为 $ data

的变量中
// 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);

希望这有帮助。