1. PHP / Говнокод #11833

    −203

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    // Тут начинается сильнейший программинг - формирование GET запроса на основе уже существующего, курите.
    
      private function getFilterURLParams($filter = 0, $option_id, $value_id, $variable = '') {
        // При изменении этих параметров, нужно будет поменять соответсвенно их в других файлах. Менять их не советую.
    
        $sep_par = ';'; // разделитель пар опций -> значений: opt1=val1,val2,val3;opt2=val1,val2,val3 ...
        $sep_opt = '='; // разделитель внутри пары опция -> значения: opt1=val1,val2,val3 ...
        $sep_val = ','; // разделитель для параметров опции: val1,val2,val3 ...
    
          if ($filter) {
    
          $matches = explode($sep_par, $filter);
    
          $options = array();
          $values = array();
          $parts = array();
    
         foreach ($matches as $option) {
            $data = explode($sep_opt, $option);
            $parts[] = $option;
            $options[] = $data[0];
            $values[] = explode($sep_val, $data[1]);
          }
    
          if (in_array($option_id, $options)) { // если эта опция уже есть в запросе, то мы не добавляем её
    
            $key = array_keys($options, $option_id); // вычисляем ключ массива для дальнейшей работы с именно этой опцией
    
            if (in_array($value_id, $values[$key[0]])) { // если это значение уже есть в запросе
              if (count($values[$key[0]]) == 1) { // и если оно единственное
                if (count($matches) == 1) { // еще и с единственной опцией, то удаляем из запроса весь фильтр
                  $out = '';
                } else { // если опция не одна, удаляем только эту опцию с её параметром
                  $out = '&' . $variable . '=' . str_replace((array_search($parts[$key[0]], $parts) ? $sep_par . $parts[$key[0]] : $parts[$key[0]] . $sep_par), '', $filter);
                }
              } else { // если значений несколько, удаляем это значение, оставляя другие с опцией
                $out = '&' . $variable . '=' . str_replace($parts[$key[0]], $options[$key[0]] . $sep_opt . str_replace((array_search($value_id, $values[$key[0]]) ? $sep_val . $value_id : $value_id . $sep_val), '', implode($sep_val, $values[$key[0]])), $filter);
              }
            } else { // если значения нет в запросе, то добавляем его к значениям этой опции
              $out = '&' . $variable . '=' . str_replace($parts[$key[0]], $options[$key[0]] . $sep_opt . $value_id, $filter);
            }
          } else { // если этой опции нет в запросе
            $out = '&' . $variable . '=' . $filter . $sep_par . $option_id . $sep_opt . $value_id;
          }
        } else { // если в запросе вообще нет переменной filter
          $out = '&' . $variable . '=' . $option_id . $sep_opt . $value_id;
        }
    
        return $out; // фух.
      }

    я после этого долго и нервно курил. чувствовал себя отбросом, а не программистом

    Запостил: Snickers, 25 Сентября 2012

    Комментарии (12) RSS

    • // При изменении этих параметров, нужно будет поменять соответсвенно их в других файлах. Менять их не советую.
      я теперь вообще буду бояться править код
      Ответить
    • Но зачем?!
      P.S. Только похапешниги могли разрешить размещать обязательные аргументы после аргументов со значением по-умолчанию.
      Ответить
      • >>P.S. Только похапешниги могли разрешить размещать обязательные аргументы после аргументов со значением по-умолчанию.

        Ты просто не понимаешь, это пример очень сильного программинга!
        От такого программинга начинают седеть, те кто его читают и модифицируют!
        Ответить
      • В одноэске это тоже, кажется, можно.
        Ответить
      • Ну а что? Язык - UnrealScript.
        native noexport final function coerce actor Spawn
        (
        	class<actor>      SpawnClass,
        	optional actor	  SpawnOwner,
        	optional name     SpawnTag,
        	optional vector   SpawnLocation,
        	optional rotator  SpawnRotation,
        	optional Actor    ActorTemplate,
        	optional bool	  bNoCollisionFail
        );
        AccumulatorCameraActor = Spawn(class'DynamicCameraActor', self,,,,, TRUE);
        Ответить
    • Какое то Вуду.
      Ответить
    • Я эту херню недавно в каком-то модуле к опенкарт видел! Тоже тогда внимание обратил
      Ответить
    • мне, так же, нужно было что-то подобное, но немного проще)
      сделал так:
      if(count($_GET) > 0) foreach($_GET as $key => $val) { $n++; if($key!='page'){$link .= ($n==1?'?':'&').$key.'='.$val;}}

      пАдскажите, бородатые, говнокод ли?)
      Ответить
    • Уххх, каааакой мощный код! Обязательно использую в проекте =))))
      Ответить

    Добавить комментарий