За последние 24 часа нас посетили 30554 программиста и 1796 роботов. Сейчас ищет 821 программист ...

Помогите решить интересную задачку

Тема в разделе "Прочие вопросы по PHP", создана пользователем mikhail.nikula, 1 сен 2016.

Метки:
  1. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Добавил немного индусской оптимизации. Время выполнения хинди-кода сократилось на 25%.
    На 10к проходов упало с 2 сек. до 1.5 сек. Что, в прочем, все равно ни разу не конкурирует с 0.3 сек. у не индусского кода.

    PHP:
    1. function getElementByPath($array, $path)
    2. {
    3.     $shame = false;
    4.     $wow_such_result = [$path, &$shame];
    5.     $fucking_madness = json_encode($array);
    6.     $fucking_madness = str_replace('":{"', '.', $fucking_madness);
    7.     $fucking_madness_so_madness = explode(',', $fucking_madness);
    8.     array_walk($fucking_madness_so_madness, function ($shit, $shitted_key, $ohmygod) {
    9.         if (substr($shit,2,strpos($ohmygod[0],'.')) === substr($ohmygod[0],0,strpos($ohmygod[0],'.'))) {
    10.             $shit = str_replace(['"', '{', '}'], '', $shit);
    11.             $holy_shit = explode(':', $shit);
    12.             if ($holy_shit[0] === $ohmygod[0]) {
    13.                 $ohmygod[1] = $holy_shit[1];
    14.             }
    15.         }
    16.     }, $wow_such_result);
    17.     return $shame;
    18. }

    Автор, а чего добился ты?
     
    denis01 нравится это.
  2. Poznakomlus

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

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    PHP:
    1. function getElementByPath($arr, $key){
    2.     foreach (explode('.', $key) as $v){
    3.         $arr = $arr[$v];
    4.     }
    5.     return $arr;
    6. };
    7. $arr = ['s1'=>['s2'=>['s3'=>'123']]];
    8. $str = 's1.s2.s3';
    9. echo getElementByPath($arr, $str);
    это вариант без рекурсии, но с циклом и в разы быстрее приведенного выше говнокода
    да здесь нет обработки ошибок, но это не важно
    код нужно писать простой и понятный
    название длинных переменных - вам явно к врачу или читать про нотации и выбрать для себя логику наименования переменных, а не плодить их где не нужно
    любая функция производящая действия со всеми элементами массива по сути цикл
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не зачет.
    --- Добавлено ---
    Ты бы хоть почитал, что там написано :D Тебя вообще порвет. Они же контекстной привязки не имеют!11!!!!!1!!!1!рас!!1!Раз!111! И тред почитал бы. Если ты всерьез к этому индусскому коду отнесся, то я бы обсудил, кому тут надо ко врачу.

    И снижай-ка градус агрессии, доктор Хаус. Я серьезно. Попутно подключи модуль юмора и иронии.
     
  4. Poznakomlus

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

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    • Агрессию свою тут не надо выпячивать. Спокойно общаться можно же, да?
    Читать умеем?
    Здесь один вариант без цикла приведен через eval
    Все остальное те же яйца только обернутые в функции обрабатывающие циклом каждый элемент массива
    Варинт с foreach будет самым быстрым, та как другие (без циклов) будут преобразовывать данные из одного типа в другой
    Мне по xyz и я давно работаю :D
     
  5. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    блин мне прилетела эта задача на собеседовании только что
     
  6. mikhail.nikula

    mikhail.nikula Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    11
    Симпатии:
    0
    Не в Харькове случайно собеседование?)
     
  7. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    А в какой компании это задание было?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Показывай им мой код, поржете вместе :)
    А потом встань и красиво уйди. Такие задания - это дрочь ради дрочи, как в армии.
     
  9. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    именно
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    :D Матрица мала