2011-06-27 60 views
0

請有這個問題,首先快速閱讀:Separating a list of entries by the first letter in a given field排序標題和顯示字母,字母與字母前述各項

走上問題的主體。

我想排序給定數組中的幾個標題。目前,它們按字母順序排列,但是,目前的代碼沒有實現另一個目標:爲其分組顯示字母。示例如下:

A 
===================================== 
- Alice's Adventured in Wonderland 
- Animal Farm 

B 
===================================== 
- Beyond the Chocolate War 

等等。

目前,該代碼顯示爲這樣:

Alice's Adventured in Wonderland 
Animal Farm 
Beyond the Chocolate War 

正如你所看到的,我需要現在字母歸類。 HTML輸出的另一個例子是在這裏看到:http://wiki.solusvm.com/index.php/Category:Documentation(請注意,我只需要它來顯示類別+標題那樣,HTML輸出)

這裏是到目前爲止,我已經得到了代碼:

<?php 

function shamil_title_compare($a, $b) { 
    return strcasecmp($a['title'], $b['title']); 
} 

usort($entries, 'shamil_title_compare'); 

$alphabetized = array(); 
foreach (range('A', 'Z') as $letter) { 
    $alphabetized[$letter] = array(); 
} 

foreach ($entries as $entry) { 
    $title = $entry['title']; 
    $firstWord = strtok($title, ' '); 
    if (!in_array($firstWord, array('The', 'A'))) { 
     $alphabetized[$firstWord[0]][] = $entry; 
    } else { 
     $nextWord = strtok(' '); 
     if ($nextWord !== false) { 
      $alphabetized[$nextWord[0]][] = $entry; 
     } else { 
      $alphabetized[$firstWord[0]][] = $entry; 
     } 
    } 
     echo $entry['title']."<br/>"; 
} 

現在我該怎麼做?

+0

首先將所有內容添加到排序數組,然後按鍵(ksort)對其進行排序。之後,做輸出。這意味着:將輸出的排序邏輯分開。這將使它最終解決起來更簡單。 – hakre

回答

2

我想補充的每一個新的信給磁盤陣列之前echo $entry['title']."<br/>";

$letter = substr($entry['title'],0,1); 
if(!in_array($letter, $lettersArray) || count($lettersArray) == 0){ 
    array_push($lettersArray,$letter); 
    echo $letter.'<p><hr /></p>'; 
} 
echo $entry['title']."<br/>"; 

此檢查是否該信已在陣列中的權利,如果沒有它增加了它,並打印出來。

+0

錯誤在這一行:if(!in_array($ letter,$ lettersArray || count($ lettersArray)== 0){。解析錯誤:語法錯誤,意外'{' – bear

+0

錯過了一個關閉的parens,現在就試試吧。 –

+0

任何特殊的$ lettersArray? – bear