За последние 24 часа нас посетили 45387 программистов и 1813 роботов. Сейчас ищут 809 программистов ...

Удалить запятую и установить отступ в многомерном массиве

Тема в разделе "PHP для новичков", создана пользователем Валерий Е, 18 сен 2015.

  1. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте! Условие задачи: " Объявите массив, где в качестве ключей будут использоваться названия областей, а в качестве значений – массивы с названиями городов из соответствующей области. Выведите в цикле значения массива, чтобы результат был таким:
    Московская область:
    Москва, Зеленоград, Клин
    Ленинградская область:
    Санкт-Петербург, Всеволожск, Павловск, Кронштадт
    Рязанская область
    …"
    Удалось решить так:
    Код (PHP):
    1. <?php
    2.     $city_rus = array(
    3.     "Московская область" => array("Москва", "Зеленоград", "Клин", "Можайск"), 
    4.     "Ленинградская область" => array("Санкт-Петербург", "Петергоф", "Тихвин", "Подпорожье", "Кронштадт"), 
    5.     "Рязанская область" => array("Рязань", "Касимов", "Ряжск", "Скопин", "Рыбное"), 
    6.     "Республика Карелия" => array("Петрозаводск", "Олонец", "Суоярви", "Сортавала", "Беломорск", "Кемь", "Питкяранта")
    7.     );
    8.     foreach ($city_rus as $regions => $city_reg)
    9.     {
    10.         // Вывести названия регионов с двоеточием с новой строки
    11.         echo ("<br /> $regions: <br />");        
    12.         foreach ($city_reg as $city_rus)
    13.         {
    14.             // Вывести названия городов через пробелы и запятые в одну строку
    15.             echo ("$city_rus, ");
    16.         }
    17.     }    
    18. ?>
    Как удалить последнюю запятую в строке городов? Как установить отступ в начале строки городов?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (PHP):
    1. foreach ($city_rus as $regions => $city_reg) {
    2.     echo $regions , ':<br>', implode(', ', $city_reg), '<br>';
    3. } 
     
  3. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    Спасибо! А как же сделать еще и отступ в начале строки с городами?
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Какой отступ? Справа, слева, сверху, от чего?

    Добавлено спустя 7 минут 43 секунды:
    Re: Удалить запятую и установить отступ в многомерном массиве
    Может список определений подойдет.
    Код (PHP):
    1. <dl>
    2. <?php
    3. foreach ($city_rus as $regions => $city_reg):
    4.     ?>
    5.     <dt><?=$regions?></dt>
    6.     <dd><?=implode(', ', $city_reg)?></dd>
    7.     <?php
    8. endforeach;
    9. ?>
    10. </dl>
     
  5. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    "Московская область:
    Москва, Зеленоград, Клин, Можайск"
    Отступ в начале строк с городами - перед "Москва" должен быть отступ или margin.
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Один вариант, я вам показал выше. Если сброс стилей не используете, то отступ у <dd> будет по умолчанию. Но в принципе, можете использовать любые другие теги, а доиграть уже стилями.

    Добавлено спустя 4 минуты:
    Re: Удалить запятую и установить отступ в многомерном массиве
    P.S. Даже если без тегов, то можно добавить один или несколько неразрывных пробелов. Хотя как-то это некошерно...
    Код (PHP):
    1. foreach ($city_rus as $regions => $city_reg) {
    2.     echo $regions , ':<br>    ', implode(', ', $city_reg), '<br>';
    3. } 
     
  7. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Код (PHP):
    1. foreach ($city_rus as $regions => $city_reg) {
    2.     echo' ',$regions,':<br>',implode(', ',$city_reg),'<br>';
    3. }  
     
  8. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    уже проверено - не действует.

    Добавлено спустя 3 минуты 21 секунду:
    Re: Удалить запятую и установить отступ в многомерном массиве
    Это работает! Почему некошерно?
     
  9. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Re: Удалить запятую и установить отступ в многомерном массив

    Вроде бы если после echo написать "\t" должен добавиться отступ(табуляция). Но я могу ошибаться, проверьте.
     
  10. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    machetero, не действует
     
  11. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Еще требуется вывести города, начинающиеся с буквы К. Получился двухэтажный код:
    Код (PHP):
    1. $city_rus = array(
    2.     "Московская область" => array("Москва", "Зеленоград", "Клин", "Можайск"), 
    3.     "Ленинградская область" => array("Санкт-Петербург", "Петергоф", "Тихвин", "Подпорожье", "Кронштадт"), 
    4.     "Рязанская область" => array("Рязань", "Касимов", "Ряжск", "Скопин", "Рыбное"), 
    5.     "Республика Карелия" => array("Петрозаводск", "Олонец", "Суоярви", "Сортавала", "Беломорск", "Кемь", "Питкяранта")
    6.     );
    7.     foreach ($city_rus as $regions => $city_reg) 
    8.     {
    9.     echo $regions , ':<br>    ', implode(', ', $city_reg), '<br>';
    10.     } 
    11.     echo 'Города, начинащиеся с буквы К: ';
    12.     foreach ($city_rus as $regions => $city_reg)
    13.     {        
    14.         foreach ($city_reg as $city_rus)
    15.         {
    16.             if ($city_rus{0} == 'К')
    17.             echo "$city_rus, ";            
    18.         }
    19.     } 
    .
    Опять в конце строчки лишняя запятая. Как удалить запятую в конце строки?
     
  12. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Re: Удалить запятую и установить отступ в многомерном массив

    Абсолютно также, как в первом случае. Всё ж уже написано.
     
  13. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    т.е. так?:
    Код (PHP):
    1. echo 'Города, начинащиеся с буквы К: ';
    2.     foreach ($city_rus as $regions => $city_reg)
    3.     {            
    4.         if ($city_reg{0} == 'К')
    5.         echo implode(', ', $city_reg), '.';                 
    6.     }
    Вы напутали, этот код не работает.
     
  14. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    Почитал форумы на эту тему. Оказывается удаление последнего символа большая проблема. А мне требуется после удаления запятой в массиве еще поставить точку вместо нее.
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Re: Удалить запятую и установить отступ в многомерном массив

    Нет тут никаких проблем. Просто нужно выкинуть поповские видеокурсы и прочитать документацию по языку.
     
  16. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Я как раз ничего не напутал. Вы вроде учитесь, а думать всё равно не хотите.
    Задача 1:
    Код (PHP):
    1. foreach ($city_rus as $regions => $city_reg)
    Что здесь происходит? Проходим по двумерному массиву $city_rus по паре ключ=>значение. У нас получается, что в $regions лежит ОДИН регион, а в $city_reg МАССИВ городов этого региона. Чтобы из массива получить строку, мы используем implode(', ', $city_reg).

    Задача 2:
    Код (PHP):
    1. foreach ($city_rus as $regions => $city_reg)
    2.     {        
    3.         foreach ($city_reg as $city_rus)
    Что здесь происходит? Первая строчка - описана выше. Но дальше мы проходим по МАССИВУ $city_reg, а в $city_rus у нас находится ОДНО значение. implode склеивает в строку МАССИВ, а его то НЕТ, там на данный момент СТРОКА.

    И какие такие форумы вы читали, что последний символ сложно удалить? Если это строка, то запросто можно удалить функцией trim(). Если склеивать массив в строку с помощью implode, то вообще чаще всего не приходится ничего удалять. Как в первом случае.

    В общем, даю решение, но неполное. Думаю, поймёте, что сделать дальше. И всё-таки, для того, чтобы чему-нибудь научиться, недостаточно просто спросить на форуме, получить готовый ответ, просто его вставить в файл и радостно кричать "ура, получилось, задача решена, пойду смотреть дальше, что бы там ещё такого на форуме спросить".
    Попробуйте сами прочитать мой код, понять, как он работает. Тем более он ни разу не сложный. Вот если сами захотите этого - толку будет больше. Можете даже написать здесь, на форуме, как понимаете код. А там вам скажут, правильно ли вы поняли или нет. И если неправильно, то скажут почему.

    Код (PHP):
    1. $city_rus = array(
    2.     "Московская область" => array("Москва", "Зеленоград", "Клин", "Можайск"), 
    3.     "Ленинградская область" => array("Санкт-Петербург", "Петергоф", "Тихвин", "Подпорожье", "Кронштадт"), 
    4.     "Рязанская область" => array("Рязань", "Касимов", "Ряжск", "Скопин", "Рыбное"), 
    5.     "Республика Карелия" => array("Петрозаводск", "Олонец", "Суоярви", "Сортавала", "Беломорск", "Кемь", "Питкяранта")
    6.     );
    7.     foreach ($city_rus as $regions => $city_reg) 
    8.     {
    9.     echo $regions , ':<br>    ', implode(', ', $city_reg), '<br>';
    10.     } 
    11.     
    12.     
    13.     
    14.     echo 'Города, начинащиеся с буквы К: ';
    15.     $kCityArr = [];
    16.     
    17.     foreach ($city_rus as $regions => $city_reg)
    18.     {      
    19.            
    20.         foreach ($city_reg as $city_rus)
    21.         {
    22.             if ($city_rus{0} === 'К'){
    23.             $kCityArr[count($kCityArr)] = $city_rus;  
    24.             } 
    25.         }                
    26.     }
    27.     
    28. var_dump($kCityArr);
     
  17. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    не знаю кто такой Попов и с его видеокурсами тоже незнаком. Я учусь по книге Дмитрий Лямин, Александр Никитин "PHP — это просто." (+ CD-ROM с видеокурсами)http://www.ozon.ru/context/detail/id/8465472/?partner=moisey&from=bar.
    я это где-то уже слышал.
     
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Re: Удалить запятую и установить отступ в многомерном массив

    Ну Русаков или что там они ещё придумали. Какая разница? Вам mr.akv настолько все подробно расписал, что дальше просто некуда, но вы этого не понимаете, т.к. видеокурсы не дают базовых концепций на которых все строится, они есть только в документации к языку и книгам/статьям по алгоритмам, шаблонам, методологиям и т.п. Пока вы с этим не ознакомитесь, толку не будет никакого, а все эти "магазины за один день", не более чем откровенное мошенничество в расчете на падкого до халявы человека. Это нормально, не вы первый, не вы последний. Просто знайте, что зря тратите своё время.

    Начните изучение с основ, не бойтесь читать документацию, в т.ч. и на английском и тогда подобных вопросов просто не будет возникать.
     
  19. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: Удалить запятую и установить отступ в многомерном массив

    Код не понял. Нарисовал блок-схему алгоритма обхода массива.
    https://cloud.mail.ru/public/5tSs/Z3wkZH1Nq
    На каждом шаге по внешнему циклу двумерного массива с регионом внутренний цикл с городами выполняется столько раз сколько городов. Количество внутренних циклов на каждом внешнем цикле зависит от количества городов внутреннего цикла.
    Нарисовал блок-схему алгоритма поиска городов с буквы К:
    https://cloud.mail.ru/public/FjNW/HokrZvR8C
    Прошу проверить правильно ли. У меня сомнение в месте установки "вывод городов".
    Блок-схемы можно редактировать:
    https://www.lucidchart.com/documents/view/0066050c-182f-4e8c-9e01-ec098de37fc9
    https://www.lucidchart.com/documents/view/042ea937-bd79-4789-8882-d6c386c94ef6
    Эти ссылки будут доступны 4 дня.
     
  20. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Видимо браузер его не добавляет и считает лишним. - начальный пробел строки.
    А лучше отделить тегами и стилями раздвинуть, как нужно и чище будет.

    mr.akv,
    Код (PHP):
    1. $town='Киров';
    2. echo $town[0]; //�
    3. echo substr($town,0,1); //�
    4. echo mb_substr($town,0,1,'utf-8'); //К  
    И лучше будет рекурсию заюзать и красиво расписать в функции.