1

ウェブショップをアップグレードしているため、フィルタリングが少し異なります。ここで、選択した 1 つ以上のフィルター値に関連するすべての製品 ID を取得するだけです。

//Filter value '8 GB'
$result[] = array(1,6,5,8,9);

//Filter value 'AMD E' (and)OR 'INTEL'
$result[] = array(1,5,8,9,10,500,502,503,600,607,608,...);

「AMD E」と「INTEL」の値は同じフィルター「プロセッサ」からのものであるため、ビジターが AMD E または INTEL プロセッサを搭載したすべての製品を希望しているため、これらを組み合わせてください。

ここで、両方のアレイにある ID のみを選択したいと思います。これまでにたくさんのメソッドを試しましたが、どの試行でも期待どおりの結果が返されません。

問題は、キー => 配列のペア$resultの数が、SQL によって返される ID の数と同じように動的であることです。の最初の配列$resultが ID の短いリストであるarray_intersect()場合、 に複数の配列がある場合、期待されるすべての結果が返されません$result

merge_array()すべてを組み合わせるだけです。そのため、訪問者は、8 GB のメモリを搭載した製品、または AMD E または INTEL プロセッサを搭載した製品をすべて見ることができます。

('8 GB') AND ('ADM E' OR 'INTEL') ソリューションを探しています。

('8 GB' OR '12 GB') AND ('ADM E' OR 'INTEL') AND ('HP' OR 'Apple' OR 'Sony')

(状況と私たちが今何をしようとしているのかを説明しようとしているあなたを失いませんでした:s)

また、SQL を使用して処理を実行することも試みました。この質問で読むことができるように、運はありません。

誰かが前にこのようなことに取り組んだことがありますか?

4

1 に答える 1

3

私が理解しているように、2段階のプロセスが必要です。

  1. 指定されたフィルター グループの条件に一致するすべてのアイテムを検索します。
  2. 使用されているすべてのフィルター グループで返されるアイテムを検索する

最初のステップでは、選択した各オプションに一致する製品を見つける必要があります。たとえば、ユーザーがオプション A、B、または C のいずれかを持つ製品を検索する場合、結果を次のような配列に入れます。

$results = [
 [1,2,3], // products that have option A
 [2,5,7], // products that have option B,
 [2,7,10] // products that have option C
];

を使用して、これらのオプションのいずれかを持つすべての製品の ID を取得できるようになりました。

$ids = call_user_func_array('array_merge', $results);

これにより、配列の合計が得られます。

ユーザーが選択したフィルター グループごとにこれを行う必要があり、交差操作を実行する必要がある配列の別の配列を取得します。

$result = [
  $ids1, // array of IDs that match ANY option from filter group 1
  $ids2  // array of IDs that match ANY option from filter group 2
];

次のように呼び出して交差点を取得できます。

$ids = call_user_func_array('array_intersect', $results);

これにより、選択したすべてのフィルター グループのいずれかのフィルター オプションに一致する製品の ID が得られます。

最後に、ユーザーがフィルターを選択したかどうかを確認する必要があります。そうでない場合は、上記のロジックを適用せず、すべての製品を返します。

私はそれが役立つことを願っています:)

于 2015-07-14T14:05:44.653 に答える