こんなメソッドを書いたんです。
/**で、コメントにあるとおりの結果が得られたのだけど、別のところでこれを使ったら思い通りの結果がでない。
* 配列aの要素から配列bの要素にない要素を探す
* aが(1,2,3,4,5), bが(1,2,4,6,7)のとき、(3,5)を返す
*/
public static function searchLostElements($a, $b){
if(!is_array($a)){
$a = array($a);
}
if(!is_array($b)){
$b = array($b);
}
$c = array();
foreach($a as $i){
if(!array_search($i, $b)){
array_push($c, $i);
}
}
return $c;
}
出なかったのは、$aと$bが以下のようなとき。
$a = array("31", "32");これだと、双方同じなので、期待する結果はナシということになるはずだけど、どういうわけか31が返ってくる。
$b = array("31", "32");
結論からいうと、array_searchの結果の検証には===を使わなければいけないということで
if(array_search($i, $b)===false){こうしたら期待通りになった。
array_push($c, $i);
}
このことは、マニュアルに書いてあったんだけど
http://manual.xwd.jp/function.array-search.html
mixed array_search ( mixed needle, array haystack [, bool strict] )て書いてあって、しばらく下にhaystack において needle を検索し、 配列中に見付かった場合にそのキーを返します。そうでない場合にFALSEを返します。
警告 |
|
この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や "" といった値を返す可能性もあります。詳細については 論理値のセクションを参照してください。この関数の返り値を調べるには ===演算子 を使用してください。 |
って、ちょっとわかりづらかったかなー。
コメントする