За последние 24 часа нас посетили 48516 программистов и 1729 роботов. Сейчас ищут 662 программиста ...

Проблема с кириллицей в массиве

Тема в разделе "PHP для новичков", создана пользователем Donotstoptry, 12 июл 2016.

  1. Donotstoptry

    Donotstoptry Новичок

    С нами с:
    10 июл 2016
    Сообщения:
    6
    Симпатии:
    0
    Решал очередную задачу из курса. Ее условия: Объявите массив, где в качестве ключей будут использоваться названия областей, а в качестве значений – массивы с названиями городов из соответствующей области. Выведите в цикле значения массива, чтобы результат был в виде:
    Область
    город
    город
    ...
    С этим проблем не возникло. Вторая задача была, сделать тоже самое что и в первой задаче, только выводить города начинающиеся с определенной буквы. Тут и возникли проблемы. Если названия городов в массиве объявлены с использованием кириллицы, то условие которое проверяет первую букву в элементе массива не срабатывает и соответственно выводятся только регионы.
    PHP:
    1. <?php
    2.                                 $city_from_region = array(
    3.                                         "Московская" => array("Москва", "Орехово-Зуево", "Зеленоград", "Клин"),
    4.                                         "Саратовская" => array("Саратов", "Энгельс", "Балашов"),
    5.                                         "Самарская" => array("Самара", "Тольятти", "Сызрань")
    6.                                     );
    7.                                 foreach ($city_from_region as $region => $city)
    8.                                 {
    9.                                     echo (
    10.                                         "<h2>$region</h2>".
    11.                                         "<ul>"
    12.                                         );
    13.                                     foreach ($city as $citys) {
    14.                                         if($citys[0] == 'С')
    15.                                         echo ("<li>$citys</li>");
    16.                                     }
    17.                                     echo ("</ul>");
    18.                                 }          
    19.                             ?>
    var_damp ($citys) при этом показывает корректное содержимое (строку с кириллицей). Но var_damp($citys[0]) выдает ромбик со знаком вопроса. Собственно поэтому условие и не срабатывает.
    Если же элементы массива на латинице, то все выводит как надо.
    PHP:
    1. <?php
    2.                                 $city_from_region = array(
    3.                                         "Moskovskaja" => array("Moskva", "Orehovo-Zuevo", "Zelenograd", "Klin"),
    4.                                         "Saratovskaja" => array("Saratov", "Jengel's", "Balashov"),
    5.                                         "Samarskaja" => array("Samara", "Tol'jatti", "Syzran"),
    6.                                         "Leningradskaja" => array("Sankt-Peterburg", "Kronshtadt")
    7.                                     );
    8.                                 foreach ($city_from_region as $region =>$city)
    9.                                 {
    10.                                     echo (
    11.                                         "<h2>$region</h2>".
    12.                                         "<ul>"
    13.                                         );
    14.                                     foreach ($city as $citys) {
    15.                                             if($citys[0] == 'S')
    16.                                             echo ("<li>$citys</li>");
    17.                                         }
    18.                                     echo ("</ul>");
    19.                                 }      
    20.                             ?>
    Вверху скрипта средствами html указана кодировка utf-8
    HTML:
    1. <meta charset="UTF-8" />
    Также добавлял
    PHP:
    результат не менялся, по крайней мере невооруженным взглядом.
    Объясните пожалуйста в чем дело с кодировкой?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Выделяйте первый символ с помощью mb_substr(), а не с помощью индексирования строки, как массива.
     
    Donotstoptry нравится это.
  3. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Проблема кроется в $citys[0] - данная возможность не вернет русский символ.
    нужно использовать mb_substr();

    PHP:
    1. $city = 'Саратов';
    2. echo mb_substr($city, 0, 1, 'utf-8'); // С
     
    Donotstoptry нравится это.