Помогите правильно сделать проверку

Тема в разделе "Как сделать...", создана пользователем Dukuй, 17 янв 2015.

  1. Dukuй

    Dukuй Щас сменю себе статус

    Регистр.:
    24 фев 2009
    Сообщения:
    307
    Симпатии:
    190
    Доброго времени суток. Имеется список с данными:
    Вася 1
    Вася 2
    Вася 3
    Вася 4
    Вася 5
    Петя 1
    Петя 2
    Петя 3
    Петя 4
    Петя 5
    Вова 1
    Вова 2
    Вова 3
    Вова 4
    Вова 5
    И два селектора для каждой из строк (Вася,Вова,Петя) и (1,2,3,4,5)
    Необходимо сделать поиск по файлу. До пустим в первом Селекторе выбрано только Петя. Результат поиска будет:
    Петя 1
    Петя 2
    Петя 3
    Петя 4
    Петя 5
    Если первый селектор пустой а во втором выбрано значение 2. Результат поиска будет:
    Вася 2
    Петя 2
    Вова 2
    Если в первом селекторе выбрано Вова, а во втором 4. Результат поиска будет:
    Вова 4

    Вот сейчас у меня данный код:

    PHP:
    foreach ($json as $key=>$value) {
        if(
    $key 0)
        {
        if((
    $value['user']['name']==$name && $name >=1) && ($value['user']['id']==$id && $id >=1))
        {
            echo 
    "результат";
        }
    }
    }
    Но работает он только если оба варианта из селекторов выбраны и подходят по зданным параметрам. Если задача не ясна, я попытаюсь обьяснить как то по другому. Очень прошу помощи, уже второй день парюсь над этой казалось бы не значительной проблемой. С уваженеим :)
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    406
    Симпатии:
    280
    А зачем это?
    $name >=1
    $name это же тип string, а он не больше 0

    PHP:
    if(
    (
    $value['user']['name']=='' and $value['user']['id'] == $id// Если имя пусто - проверяем по ID
    or
    (
    $value['user']['id']=='' and $value['user']['name'] == $name// Если ID пусто - проверяем по имени
    or
    (
    $value['user']['id']==$id and $value['user']['name'] == $name// Или проверяем оба варианта
    ){

    }
     
  3. Dukuй

    Dukuй Щас сменю себе статус

    Регистр.:
    24 фев 2009
    Сообщения:
    307
    Симпатии:
    190
    Данный вариант к сожалению не подходит. Так как селекторов около 10 штук.
    Если перебирать все возможные варианты которые поставит пользователь в критериях поиска, получится очень громоздкий код.
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    406
    Симпатии:
    280
    Тогда просто
    PHP:
    if($value['user']['id']==$id or $value['user']['name'] == $name)
     
  5. Dukuй

    Dukuй Щас сменю себе статус

    Регистр.:
    24 фев 2009
    Сообщения:
    307
    Симпатии:
    190
    К сожалению тоже не вариант:) В таком случае результат будет выводиться если хотя бы один и критерий поиска совпадает. А остальные критерии он будет просто игнорировать.
    До пустим в первом селекторе выбран (Вася), а во втором (3). Результат будет:
    Вася 1
    Вася 2
    Вася 3
    Вася 4
    Вася 5
    Петя 3
    Вова 3
    А нужно:
    Вася 3
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    996
    Симпатии:
    268
    Возможно не совсем готовое решение, придется его под себя немного подправить.
    PHP:
    $array_selectors = array ('name''number''somting_else');
    $array_zapolnen_selector = array(); // тут будут храниться только заполненные селекторы
    foreach ( $array_selectors as $key => $values ){
    if ( !empty(
    $value['user'][$values]) ) { // тут подставляете свое проверяемое значение с нужным селектором. Селектор хранится в $values
    $array_zapolnen_selector[] = $values// формируем массив заполненных селекторов
    }
    }

    // обходим массив с заполненными селекторами
    $tempArray $value// тут храним временную выборку, которую постепенно фильтруем
    foreach ( $array_zapolnen_selector as $key => $val ){
    // проверка идет через "И", не через "Или"
    if ($tempArray['user'][$val]==$$val ){ // тут перед val стоит 2 $$ . Первый преобразует селектор в текст, второй из текста делает имя переменной
    $tempArray $value['user'][$value];
    }
    //if
    else{
    $tempArray ''// если ничего нету
    }
    }
    //foreach
    var_dump$tempArray );
     
    Последнее редактирование: 17 янв 2015
    Dukuй нравится это.