2010-09-27 72 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); 

希望這有助於。