За последние 24 часа нас посетил 19151 программист и 1642 робота. Сейчас ищут 987 программистов ...

Формирование строки для фильтра

Тема в разделе "PHP для новичков", создана пользователем cherniy_komunar, 13 окт 2010.

  1. cherniy_komunar

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

    С нами с:
    5 апр 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Одесса
    Людид оюрый помогите с формированием строки а то уже второй день бьюсь не могу доделать..

    Есть к примеру ссылки

    <a href="<?php Filtr($_GET['filtr'],'product',25); ?>">2-5 кВт.</a>
    <a href="<?php Filtr($_GET['filtr'],'product',30); ?>">5-10 кВт.</a>
    <a href="<?php Filtr($_GET['filtr'],'price',1250); ?>">1250 у.е.</a>
    <a href="<?php Filtr($_GET['filtr'],'price',500); ?>">500 у.е.</a>

    Теперь написал функцию которая разбирает эту строку:

    PHP:
    1.  
    2. function Filtr($filtr, $parametr, $values) {
    3. //$filtr - полученная строка фильтра
    4. //$parametr - параметр значения
    5. //$values - значение для параметра
    6. if ($filtr == '') { $stroka=$parametr."=".$values; } else {
    7. $keywordss = preg_split("/[;]+/", $_GET['filtr']); //Загоняем данные в масив через разделитель ;
    8. foreach($keywordss as $key => $value)//Создаем новый массив с данных
    9.  {
    10.    $pos = strpos($value, "=");//Позиция символа
    11.    $model = substr($value, 0, $pos ); //Вырезаем все до =
    12.    $models = substr($value, $pos+1 ); //Вырезаем все после =
    13.    $lesson[$model] = explode ("," , $models); //Создаем массив
    14.  }//end foreach
    15.  
    16. foreach ($lesson as $outer_key => $single_array)
    17.  {
    18. $rre='';
    19.      foreach  ($single_array as $inner_key => $value)
    20.        {
    21.           $rre=$rre.$value.",";
    22.  
    23.       }//end foreach 2
    24.        $rre=substr($rre, 0, strlen($rre)-1);
    25.        if ($outer_key == $parametr) {
    26.           $fls=$fls.$outer_key."=";
    27.           $fls=$fls.$rre.",".$values.";";
    28.        } else {
    29.           $fls=$fls.$outer_key."=";
    30.           $fls=$fls.$rre.";";
    31.        }//end $outer_key
    32.        
    33.  }//end foreach 1
    34.  if (!$lesson[$parametr]) {//Если такоо параметра нету то прибавляем
    35.   $fls=$fls.$parametr."=".$values;
    36.  } else {
    37.  $fls=substr($fls, 0, strlen($fls)-1);
    38.  }
    39. $stroka=$fls;
    40.  
    41. }
    42. echo "?filtr=".$stroka;
    43. }
    44.  
    т.е. формируется строка вида "?filtr=product=25,30;price=1250,500"

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

    Наверное можно это все сделать както по другому но мне ничего не пришло в голову кроме этого...

    Заранее благодарен за ответ
     
  2. cherniy_komunar

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

    С нами с:
    5 апр 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Одесса
    Все сделал..спс за помощь :)))))))))))

    PHP:
    1.  
    2. function creating($filtr, $parametr, $values) {
    3. if ($filtr == '') { $stroka=$parametr."=".$values; } else {
    4. $keywordss = preg_split("/[;]+/", $_GET['filtr']); //Загоняем данные в масив через разделитель ;
    5. foreach($keywordss as $key => $value) {//Создаем новый массив с данных
    6.    $pos = strpos($value, "=");//Позиция символа
    7.    $model = substr($value, 0, $pos ); //Вырезаем все до =
    8.    $models = substr($value, $pos+1 ); //Вырезаем все после =
    9.    $lesson[$model] = explode ("," , $models); //Создаем массив
    10. }//end foreach
    11. unset($lesson[0]);//удаление пустого массива
    12.  if ($lesson[$parametr]) {//ЕСЛИ ТАКОЙ ПАРАМЕТР ПРИСУТСТВУЕТ В СТРОКЕ ТО
    13.     if (in_array($values, $lesson[$parametr])) { //ЕСЛИ ТАКОЕ ЗНАЧЕНИЕ ПРИСУТСТВУЕТ В НАЙДЕННОМ ПАРАМЕТРЕ ТО
    14.        foreach ($lesson[$parametr] as $outer_key => $single_array) {//ЗАПУСКАЕМ ЦИКЛ ПО ТЕКУЩЕМУ МАССИВУ
    15.           if ($single_array == $values) { unset($lesson[$parametr][$outer_key]); } //ЕСЛИ ЗНАЧЕНИЕ СОВПАЛО ТО УДАЛИМ ЕГО ИЗ СТРОКИ
    16.         }//END FOREACH
    17.     } else { //ЕСЛИ ТАКОГО ЗНАЧЕНИЯ НЕТУ ТО ДОБАВИМ
    18.     $lesson[$parametr][]=$values;
    19.     }//END in_array
    20.  } else { //ЕСЛИ ТАКОГО ПАРАМЕТРА НЕТУ В СТРОКЕ ТО ДОБАВИМ
    21.      $lesson[$parametr][]=$values;
    22.  }//END $lesson[$parametr]
    23. unset($lesson[0]);//удаление пустого массива
    24. foreach ($lesson as $outer_keyw => $single_arrayw) {
    25. $rre='';//фильтр
    26.     foreach  ($single_arrayw as $inner_key => $value) {
    27.       $rre=$rre.$value.",";
    28.     }//end foreach 2
    29. if ($rre == '') { } else {     
    30. $stroka=$stroka.$outer_keyw."=".$rre;
    31. $stroka=substr($stroka, 0, strlen($stroka)-1);//Удаляем лишний символ в конце строки
    32. }//END if ($rre == '')
    33. $stroka=$stroka.";";   
    34.     }//end foreach  ($single_arrayw as $inner_key => $value)
    35. $stroka=substr($stroka, 0, strlen($stroka)-1);//Удаляем лишний символ в конце строки    
    36. }//END if ($filtr == '')
    37.   $stroka="?filtr=".$stroka;
    38.     if ($stroka == '?filtr=') { echo "?"; } else { echo $stroka; }
    39. }//END function creating
    40.