Как выполнить сортировку слов по алфавиту и отобразить первую букву каждого слова?

Я нашел код сортировки по алфавиту с выводом первой буквы на форуме. Код работает исправно, но возникает ошибка: "Notice: Undefined variable: last_char in". Как можно изменить код, чтобы устранить эту ошибку? Я понимаю, что переменной $last_char не хватает значения, но каким образом правильно задать это значение в текущем коде?
  • 18 сентября 2024 г. 21:03
Ответы на вопрос 2
Для устранения ошибки "Notice: Undefined variable: last_char" необходимо убедиться, что переменная `$last_char` инициализируется перед первым её использованием. В вашем коде есть неявное использование переменной, и если её значение не было установлено ранее, возникнет ошибка.

Вот пример кода, который сортирует список слов по алфавиту и отображает первую букву каждого слова, предотвращая ошибку с неопределённой переменной:

```php
<?php
// Исходный массив слов
$words = array("яблоко", "груша", "апельсин", "банан", "вишня");

// Сортируем массив слов по алфавиту
sort($words);

// Переменная для хранения последней буквы
$last_char = '';

// Проходим по отсортированному массиву
foreach ($words as $word) {
    // Получаем первую букву текущего слова
    $first_char = mb_substr($word, 0, 1);

    // Проверяем, изменяется ли первая буква
    if ($first_char !== $last_char) {
        // Выводим первую букву
        echo $first_char . "\n";

        // Обновляем переменную для следующей итерации
        $last_char = $first_char;
    }

    // Дополнительно можно вывести само слово, если нужно
    echo $word . "\n";
}
?>
```

### Объяснение кода:
1. **Инициализация переменной `$last_char`** — перед циклом `foreach` мы устанавливаем начальное значение переменной `$last_char` равным пустой строке `''`. Это позволяет избежать ситуации, когда переменная не определена.
   
2. **Сортировка массива** — функция `sort()` упорядочивает массив `$words` по алфавиту.

3. **Цикл `foreach`** — перебираем каждое слово в отсортированном массиве:
   - Получаем первую букву с помощью функции `mb_substr()`, которая учитывает многобайтовые символы.
   - Сравниваем первую букву с последней буквой, сохранённой в `$last_char`. Если они различаются, выводим первую букву и обновляем `$last_char`.

Этот код теперь работает корректно и не вызывает предупреждений об неопределённых переменных.
элементарно: присвоить ей пустое значение перед циклом: 
$last_char = '';

а ещё код не будет работать для нелатиницы при нормальном конфиге PHP, лучше substr() заменить на её аналог из mbstring mb_substr()
Похожие вопросы