2013年8月12日月曜日

in_array[PHP notes]

PHP公式のnoteから 勝手に取捨選択。


小文字と大文字を区別しない in_array()


 function in_arrayi($needle$haystack) {
        return 
in_array(strtolower($needle), array_map('strtolower'$haystack));
    }




配列内に数字があるとき変なので気をつけてね


$array = array('testing',0,'name');var_dump($array);//this will return truevar_dump(in_array('foo'$array));

3つめのパラメータにtrueを指定すればいいとはいえ、これは変。
PHP5.4.6でも確認。
他のnoteでも、沢山のなんでそーなるのって例だらけ。



多次元配列の場合


 function in_multiarray($elem$array)
    {
        
$top sizeof($array) - 1;
        
$bottom 0;
        while(
$bottom <= $top)
        {
            if(
$array[$bottom] == $elem)
                return 
true;
            else
                if(
is_array($array[$bottom]))
                    if(
in_multiarray($elem, ($array[$bottom])))
                        return 
true;
                  
            
$bottom++;
        }     
        return 
false;
    }
ゆるい比較なので実質使えない


RecursiveIteratorIterator 使ったサンプルもあったので、厳密比較できるように変更


function in_array_recursive($needle, $haystack ,$strict = FALSE ) { 
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack));
    if ($strict===true){
        foreach($it AS $element)
            if($element === $needle) return true;
    }else{
        foreach($it AS $element)
            if($element == $needle) return true;
    }
    return false; 


 


0 件のコメント:

コメントを投稿