array_searchの結果が合わないときは

| | コメント(0) | トラックバック(0)
こんなメソッドを書いたんです。

    /**
     * 配列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");
 $b = array("31", "32");
これだと、双方同じなので、期待する結果はナシということになるはずだけど、どういうわけか31が返ってくる。

結論からいうと、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 や "" といった値を返す可能性もあります。詳細については 論理値のセクションを参照してください。この関数の返り値を調べるには ===演算子 を使用してください。


って、ちょっとわかりづらかったかなー。


トラックバック(0)

このブログ記事を参照しているブログ一覧: array_searchの結果が合わないときは

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/267

コメントする


画像の中に見える文字を入力してください。

ブックマーク

はてなブックマークに追加 Yahoo!ブックマークに登録 del.icio.us に登録 ライブドアクリップに追加 Google Bookmarks に追加

Ajax: 2009年5月: 月別アーカイブ

このブログ記事について

このページは、ぴろしが2009年2月26日 02:19に書いたブログ記事です。

ひとつ前のブログ記事は「PHPで改行コードはPHP_EOL」です。

次のブログ記事は「ERROR: The DSP imagick.dsp does not exist.- PHPでWindowsでImageMagick」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。