@microf

Как вывести массив в алфавитном порядке с буквой-заголовком?

Добрый день. Я запутался. Надо было мне вывести список из массива:

А
Андрей
Александр
Б
Борис
Балда
с ним всё ок
$model = ["alex", "gina", "gena", "reva","psih","ter","denis"];

$result = array();
      {
        parent::init();
        sort($this->model);
    }

    public function run()
    {

        $result = array();
        $previous = null;
        $i = 0;
        foreach ($this->model as $value) {
            $firstLetter = substr($value, 0, 1);
            if ($previous !== $firstLetter) {
                $result[$i] = mb_convert_case($firstLetter, MB_CASE_UPPER, "UTF-8");
                $i++; //тут просто для ясности
            }
            $result[$i] = $value;
            $previous = $firstLetter;
            $i++;
        }

        return $this->render('index', ['result' => $result]);
    }

и вывод
<ul>
    <?php
    foreach ($result as $res) {
        if (iconv_strlen($res) == 1) {
            ?> <li class="list__item--one">
        <?php echo $res; ?></li>
    <?php 
} else {
    ?>
    <li class="list__item"><a href="">
            <?php echo $res ?></a> </li> <?php
                                        }
                                    }
                                    ?>
</ul>

Всё отлично выводится
Но напомнили мне, что это не просто имена, а ссылки с урлами. Соответственно массив будет другой
array(6) { [0]=> array(3) { ["id"]=> string(1) "1" ["name"]=> string(4) "Alex" ["url_name"]=> string(8) "url_Alex" } [3]=> array(3) { ["id"]=> string(1) "6" ["name"]=> string(5) "Denis" ["url_name"]=> string(9) "url_denis" } [1]=> array(3) { ["id"]=> string(1) "2" ["name"]=> string(4) "Gast" ["url_name"]=> string(8) "url_gast" } [2]=> array(3) { ["id"]=> string(1) "5" ["name"]=> string(4) "Gina" ["url_name"]=> string(8) "url_gina" } [4]=> array(3) { ["id"]=> string(1) "9" ["name"]=> string(8) "Ortopedy" ["url_name"]=> string(12) "url_ortopedy" } [5]=> array(3) { ["id"]=> string(2) "10" ["name"]=> string(4) "Torn" ["url_name"]=> string(9) "url_thorn" }

т.е. состоящим из других массивов. Отсортировать я его смогу, конечно, но как мне его вывести так, чтобы была буква?
A
Alex
Мне же надо её куда то записать? создать элемент массива двумерного между другими элементами? Чего то я затупил
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
kawabanga
@kawabanga
этап 1 - мультисорт по полю имя.
этап 2 - проход foreach, в переменную записываете текущую заглавную букву.
$letter = '';
forearch ($result as $res) {
if ({первая буква имени <> $letter}) { $letter = {первая буква};  echo $letter; }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы