"PHP" / Говнокод #11833 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Snickers, (Updated )

Комментарии (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;}}

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8