За последние 24 часа нас посетили 19463 программиста и 1610 роботов. Сейчас ищут 803 программиста ...

цикл foreach

Тема в разделе "PHP для новичков", создана пользователем Sinevik, 21 фев 2017.

  1. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    У нас есть код.
    PHP:
    1. <?php
    2. $a = array (100, 313, 605);
    3. foreach ($a as &$v) $v++;
    4.     echo "Элементы массива: ";
    5. foreach ($a as $elt)  echo "$elt ";
    6.  
    7. ?>
    Результат работы этого кода таков
    Элементы массива: 101 314 606

    Вопрос: А как сделать что бы пробел добавился не после всех значений, а допустим только после 313?
     
    #1 Sinevik, 21 фев 2017
    Последнее редактирование модератором: 21 фев 2017
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1. if ($elt == 313)
    2.     echo "$elt ";
    3. else
    4.     echo $elt;
     
  3. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    Да спасибо. Что то я поплыл, я просто подумал можно просто без if и else обойтись
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    можно и без них, тут десяток вариантов решения задачи
     
  5. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    Можете показать как без них? А то у меня уже голова перегрелась
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    могу, если покажешь вариант своего решения
     
  7. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    Ну всё что я придумал это вот такой бред
    PHP:
    1. <?php
    2. $a = array (100, 313, 605);
    3. foreach ($a as &$k => &$v) $v++;
    4.     echo "Элементы массива: ";
    5. foreach ($a as $del[1] => $elt)  echo "$elt ";
    6.  
    7. ?>
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    PHP:
    1. echo ($elt == 313) ? "$elt " :  $elt;
    --- Добавлено ---
    а чего ты первым форычем делаешь то???
     
  9. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    Да я уже сам не знаю! Ну типа беру ключ и значение и делаю на них ссылку. А во втором форыче типа как задаю что ключу равному [1] соответствует значение $v только добавляется пробел. ))) вот такой бред
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    PHP:
    1. <?php
    2.  
    3. $a = array (100, 313, 605);
    4.    echo "Элементы массива: ";
    5. foreach ($a as $elt) echo($elt==313) ? "$elt ":$elt;
     
  11. Sinevik

    Sinevik Новичок

    С нами с:
    7 фев 2017
    Сообщения:
    83
    Симпатии:
    4
    Код (Text):
    1. $a = array (100, 313, 605);
    2. foreach ($a as &$v) $v++;
    3.     echo "Элементы массива: ";
    4. foreach ($a as $elt) {
    5.      echo($elt==$a[1]) ? "$elt ":$elt;
    6. }
    ОО всё заработало. И на 1 каждое значение увеличелось, и после значения с ключом 1 добавило пробел. Всё спасибо. Просто только начинаю учить php, читаю сейчас книгу.
    --- Добавлено ---
    Элементы массива: 101314 606
     
  12. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    1) ' ? : ' - это альтернативный способ записи if-else, т.е. тоже условие
    2) не стоит привыкать к записи циклов и условий без фигурных скобок. Да ещё с отступом на следующей строке (4 строка в первом вашем комменте) - это сильно замедляет чтение кода и повышается вероятность ошибки.
     
  13. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    @valentinnew я как только буду нуждаться в советах, я их сразу же попрошу )
     
  14. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    а я вам писал?
     
  15. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ну видимо да, ибо я придерживаюсь такого же синтаксиса по одной простой причине:

    Мне приходится работать с огромными наборами данных, и есть нет скобок за условием, а в условии одна строка до ";" то это работает быстрее, можете замерить
     
  16. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
  17. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    @valentinnew данный тест проводился давно и я не помню конкретных цифр, но факт есть факт
     
  18. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    1.6 раза. Но я бы хотел узнать, какой это процент времени от общего выполнения скрипта, чтоб жертвовать читаемостью? - это раз
    А во вторых в php7 работает одинаково)

    Может быть вы ещё и весь скрипт пишете в одном файле без использования инклудов?

    А вообще это оффтопик
     
  19. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    вот кстати на 7-ке не проверял ( надо будет заняться на досуге

    а что в этом плохого, объясните если не сложно?
    --- Добавлено ---
    ну если скрипт работает часов 5 из низ 3 часа он перебирает массивы, экономия на лицо, правда же?
     
  20. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    т.е. у вас 1,3 * 10^11 итераций, в которых выполняются элементарные действия вроде инкремента?
     
  21. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    да, ++$i выполняю
     
  22. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    130000000000 раз? ок. Больше вопросов нет.
    Мне вас не переубедить.
     
  23. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Да и не совсем понятно зачем это, это же быстрей работает, это факт, а что там делается и как, это дело 25-е

    Я еще и пишу строку в одинарных кавычках всегда, и sizeof вместо count...и много чего еще...
     
  24. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    ну кавычки то понятно. Но какая разница между sizeof и count?
    А дело тут в едином стиле. Вы не для себя пишете, а для того, кто будет потом читать ваш код.
    + в гите при мерже могут быть конфликты, когда кто-то добавит ещё одно действие в тело условия, а гит смержит без скобок
    --- Добавлено ---
    а вообще http://www.php-fig.org/psr/psr-2/ не глупые люди написали.
     
  25. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Сами же проверите по скорости, да?