За последние 24 часа нас посетили 22188 программистов и 993 робота. Сейчас ищет 641 программист ...

Баг или фича?

Тема в разделе "PHP для профи", создана пользователем noRoman, 3 апр 2018.

Метки:
  1. noRoman

    noRoman Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    Интересное поведение. Получаем дубликат предпоследнего элемента и теряем последний элемент. Такой код написать надо еще умудриться, но все же.
    Код (Text):
    1. <?php
    2. $cities = [
    3.     [
    4.         'id' => 1,
    5.         'name' => 'Yaroslavl',
    6.         'desc' => 'text',
    7.     ],
    8.     [
    9.         'id' => 2,
    10.         'name' => 'Cheboksary',
    11.         'desc' => 'text',
    12.     ],
    13.     [
    14.         'id' => 3,
    15.         'name' => 'Saint-Petersburg',
    16.         'desc' => 'text',
    17.     ],
    18.     [
    19.         'id' => 4,
    20.         'name' => 'Kazan',
    21.         'desc' => 'text',
    22.     ],
    23. ];
    24. foreach ($cities as &$city) {
    25.     unset($city['desc']);
    26. }
    27.  
    28.  
    29. print_r($cities);
    30. foreach ($cities as $city) {
    31.     print_r($city);
    32. }
    кому лень запускать скрин прилагается
    [​IMG]
     

    Вложения:

    #1 noRoman, 3 апр 2018
    Последнее редактирование: 3 апр 2018
  2. noRoman

    noRoman Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    3
    Симпатии:
    0
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    имя другое дай переменной и все
    PHP:
    1. foreach ($cities as $city2) {
    2.     print_r($city2);
    3. }
    либо можешь оставить - но перед вторым циклом удали unset($city);
    тем самым отвязав ссылку на $cities
     
  4. noRoman

    noRoman Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    Да это решение, но представленный пример довольно надуманный. На подобное я наткнулся при решении задачи "в лоб". Итоговый скрипт конечно же не содержал два цикла.
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    > Status: Not a bug
    не баг, а фича. с указателями надо работать оооочень осторожно.
    --- Добавлено ---
    фича в особенностях области действия переменных (scope), в пхп переменная цикла не локальна для цикла, а остаётся жить дальше. всё остальное — логичные следствия.
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @noRoman, замените первый print_r на var_dump и увидите для элемента с индексом 3 нечто отличное от предыдущих.
    И если уж используете ссылку, то действительно требуется внимательность :). Если эта переменная как ссылка далее не нужна, а имя очень нравится - можно использовать unset($city); сразу после цикла.
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Об это все спотыкаются, когда начинают только пользоваться ссылками в php. Я в первый год работы тоже такую тему здесь постил :)
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    проблем не будет, если
    PHP:
    1. либо
    2. foreach ($cities as $cKey => $city) {
    3.     unset($cities[$cKey]['desc']);
    4. }
    5.  
    6. либо
    7. foreach ($cities as &$city) {
    8.     unset($city['desc']);
    9. }
    10. unset($city)
     
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    все таки как хорошо когда есть let const:)
     
    romach нравится это.
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    В JS своих прелестей хватает. Даже в последнем
     
  11. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    люблю кодить
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а по фоткам не скажешь
     
    TeslaFeo нравится это.
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Может кавычки забыла...
    Игорь, не бось уже за палку держишься?:D
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    за соломинку хватаюсь
     
  15. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    ахахах
    ну парни даете)
    а где мои фотки то нашли?
     
  16. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Tankisa В телеграме. Хакеры..
     
  17. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    вот вы хулиганы))
    работать не хотите с такой девчонкой в одном офисе?
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    дык в интернете, например
    ты ж вроде не скрываешься
    --- Добавлено ---
    ишь ты
     
  19. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    Уважаемый, Игорь)
    Удали мои ссылки, плиз ;););)
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    хантишь на красоту, получается

    --- Добавлено ---
    лэдно
     
  21. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    хорооошш)) посмеялись и ладно) можно теперь удалить?
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    госпожа велит удалять
    исполнено
     
  23. Tankisa

    Tankisa Новичок

    С нами с:
    21 май 2018
    Сообщения:
    10
    Симпатии:
    0
    спасибо, написала тебе в телегу))
     
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Tankisa вот так всегда придут и давай требовать нет что бы котлет в замен предложить..
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    как теперь нам узнать, что ты не Молотова, например, а именно Немолотова. Теперь только гадать и верить. А так у нас были доказульки подлинности. Теперь их нет.