Сортировка заголовков и отображение в алфавитном порядке, с буквой алфавита перед записями - PullRequest
0 голосов
/ 28 июня 2011

Пожалуйста, сначала быстро прочтите этот вопрос: Разделение списка записей первой буквой в данном поле

На основную часть вопроса.

Я пытаюсь отсортировать несколько заголовков в указанном массиве. В настоящее время они отображаются в алфавитном порядке, однако текущий код не достигает еще одной цели: отображать алфавитную букву для своей группировки. Пример ниже:

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/>";
}

Что мне теперь делать?

1 Ответ

2 голосов
/ 28 июня 2011

Я бы добавил каждую новую букву в массив прямо перед 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/>";

Это проверяет, находится ли буква в массиве, если нет, то добавляет ее и распечатывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...