【发布时间】:2011-09-23 21:28:57
【问题描述】:
请先快速阅读这个问题: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/>";
}
我现在该怎么办?
【问题讨论】:
-
首先将所有内容添加到排序数组中,然后按键排序(ksort)。之后,进行输出。这意味着:将排序逻辑与输出分开。这将使它最终更容易解决。