※ ChatGPTを利用し、要約された質問です(原文:array_intersectで空欄を比較しない)
array_intersectで空欄を比較しない方法
このQ&Aのポイント
配列の共通する値を取得するためにarray_intersectを使用します。
追加の配列も比較する場合は、配列の要素をif文で追加してからarray_intersectを使用します。
追加の配列が存在しない場合は、追加のif文を省略してarray_intersectを使用します。
お世話になります。
$arr1 = array(1,2,3);
$arr2 = array(2,3,4);
という配列が存在していたとき、これらすべてに共通する値を取り出すとき、
array_intersect($arr1,$arr2)
で良いと思うのですが、上記に更に値があるか分からない配列($arr3,$arr4)を比較したいときどのように記述すればよいでしょうか?
$array_list[] = $arr1;
$array_list[] = $arr2;
if($arr3 != NULL){$array_list[] = $arr3;}
if($arr4 != NULL){$array_list[] = $arr4;}
$array_list = implode(",",$array_list);
と半ば強引に配列に追加したのですが、var_dump($array_list)したところ、
Array,Arrayとなってしまいました。
$arr3,$arr4に値が入っている場合と入っていない場合でif分岐させて、
array_intersect($arr1,$arr2)
array_intersect($arr1,$arr2,$arr3)
array_intersect($arr1,$arr2,$arr4)
array_intersect($arr1,$arr2,$arr3,$arr4)
の4パターンを書くこともできるかと思いますがスマートではないような気がしまして・・・。
なにかよい方法が有りましたらよろしくお願い致します。
お礼
度々のご回答ありがとう御座います。 やはりそうだったのですね…((T_T))。 SQLで表結合をして検索したらすごく高速で今もう一度検索機能を作りなおそうか迷っています…。 【wp_postmeta】 post_id meta_key meta_value -------------------------------------------- 1 area 1 1 category 1 現在wp_postmeta内にカスタムフィールドの「フィールド名(meta_key)」と「その値(meta_value)」が保存されており、「area」が「1」の投稿IDを取得する場合、 SELECT DISTINCT `wp_posts`.ID FROM `wp_posts` LEFT JOIN `wp_postmeta` ON `wp_posts`.ID = `wp_postmeta`.post_id WHERE `wp_postmeta`.meta_key = 'area' AND `wp_postmeta`.meta_value = '1' これで問題なくIDが取れるのですが、更に「category=1」などのAND検索が必要となった場合、 ~WHERE `wp_postmeta`.meta_key = 'area' AND `wp_postmeta`.meta_value = '1' AND `wp_postmeta`.meta_key = 'category' AND `wp_postmeta`.meta_value = '1' という記述では当然ながら0件でヒットしませんでした。 このような場合、何か良い検索方法はありますでしょうか? 何からなにまで質問づくしで申し訳御座いません(/_;)