PHPのin_arrayを使っていて、足りない処理があったので、作っておきました。
in_arrayは、配列の中に、特定の値が存在するかどうかという非常に便利に配列計算をしてくれる基本関数なんですが、今回は、配列の中に存在する値も配列という処理を行いたかったのですが、in_arrayには、配列in配列の処理はすでに含まれていました。
だけど・・・検索対象の配列が、全て含まれている状態でないとtrueが帰らなかったので、その配列のなかのどれかが含まれているという状態の処理がしたかったんですね。
どんな時に使うの?
そもそも、配列の中の検索で配列を使うって、頭がおかしいと思いますよね。
でも、実際に、データベース["A","B","C","D","E"]の中に、"A"と"C"が含まれている事を知りたい時ってあるよね?
え?無い?
じゃあ、3年B組の中に、イケメンの「佐藤」と「田中」って名前のやつがいるか探す時にはどうだろう?
もちろん、佐藤、田中という風に順番に処理してもいいが、この記事を読んでいるプログラマーの諸君は、そんな無駄なfor文を毎回書きたく無いだろう?
そして既存のin_arrayは、佐藤と田中の2人とも存在しなければ、trueを返してくれないんだ。
そこは佐藤だけでも、trueを返して欲しくなってきただろう?
そんなワケで作った関数だが、はじめに断っておくが、この関数は、単純に、for文を回して、in_arrayを個別に行なっているだけにすぎない。
でも、こんな関数でも便利に使いたくなってくる瞬間があるので、下記のソースをコピペするのではなく、あくまでサンプルプログラムという事で、自分でコーディングしてくれ。
ソース
// in_arrayの拡張関数 ($targetArr の中に、 $innerArr の中のどれかが含まれるかどうか?)
function in_array_multi($innerArr,$targetArr){
$flg = false;
for($i=0; $i<count($targetArr); $i++){
if(in_array($targetArr[$i] , $innerArr)){
$flg = true;
break;
}
}
return $flg;
}
ぼやき
in_arrayの第3フォールドに、strictとして、検索する型も対象にするかどうかのオプションがある。
どうせなら、ここに、検索対象が配列の場合、全部一致か、部分一致かのオプションもつけてくれれば、便利に使えたのにな・・・
改めて仕様って大事だと考えさせられたぜ。
0 件のコメント:
コメントを投稿