タオバオと同様のマルチレベルフィルタリングを行うためにTPを使用する方法についてアドバイスを求めたいのですが、1つまたは2つのフィールドを渡す場合は制御が簡単であることがわかりました。 3 つ以上のフィールドを渡すと、フィルターされたデータが間違ったものになります。何か良い方法はありますか?

WBOY
リリース: 2016-06-20 12:53:10
オリジナル
1050 人が閲覧しました

      //多级筛选                                          $name=$_GET[pid];                     $brand=$_GET[theme];                     $carage=$_GET[price];                     echo $carage;                                        if($name="泵车" AND $brand="三一"){                     $handmebuyinfo=M("handmebuyinfo");                     $map['name']=$name;                     $map['brand']=$brand;                     //$map['carage']=$carage;                     $row=$handmebuyinfo->where($map)->select();                     dump($row);                     }                                                             if($name=='' OR $brand=='' OR $carage==''){                     $handmebuyinfo=M("handmebuyinfo");                     $map['name']=$name;                     $map['brand']=$brand;                     $map['carage']=$carage;                     $map['_logic'] = 'OR';                     $row=$handmebuyinfo->where($map)->select();                     dump($row);                     }
ログイン後にコピー


ディスカッション (解決策) への返信

フィルターは (および) に関連しています
グループ内の場合 存在する場合複数の選択肢がある場合、グループ内に or (または) 関係が存在します。たとえば、ポンプ車とミキサー車が同時に選択されます
ただし、現時点ではこの必要はありません

ORM を使用するため、アセンブリ作業は完了した ORM によって行われます
必要なのは、空のパラメーターを渡さないことだけです $_GET = array_diff($_GET, array(''));
対応するフィールドと同じ名前の変数名を渡すのが最善です。そうすれば、対応するデータをプログラムする必要はありません
TP はネームマッピング関数を使用しているようです、それを使用できます

フィルタリングは (and)
に関連しています。グループ内に複数の選択肢がある場合、グループ内に or (or) 関係があります。たとえば、ポンプ車とミキサー車が同時に選択されます。 time
ただし、現時点ではこの必要はありません

ORM を使用しているため、アセンブリ作業は ORM によって完了します
空のパラメーターを渡さないようにする必要があるだけです $_GET = array_diff($_GET, array(''));
対応するフィールドと同じ名前の変数名を渡すのがベストなので、プログラミングの必要はありません。 データ
は TP が使用するようです。名前マッピング関数

を使用して、配列内の差異セットを比較できます。少し分かりやすく説明していただけますか。

$a = array(  'a' => 1,  'b' => '',  'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
ログイン後にコピー
ログイン後にコピー
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
ログイン後にコピー
ログイン後にコピー
この方法では、if($name=='') で 1 つずつ判断する必要がありません

$a = array(  'a' => 1,  'b' => '',  'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
ログイン後にコピー
ログイン後にコピー
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
ログイン後にコピー
ログイン後にコピー
この方法if ($name=='') は必要ありません。 一つ一つ判断した結果、最初は

を使用することが最終的にわかりました。ブランド']=$map[ブランド]; /$map['carage']=$map[carage];
$row=$handmebuyinfo->where($map)->select( ;
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート