2012-12-16 13 views
7
$arr = array(
    'test' => array(
     'soap' => true, 
    ), 
); 

$input = 'hey'; 
if (in_array($input, $arr['test'])) { 
    echo $input . ' is apparently in the array?'; 
} 

結果: ちょっと、配列にありますか?in_arrayは意味がありません

私には意味をなさないので、理由を説明してください。そして私はこれをどのように修正するのですか?

答えて

11

true == 'hey'type jugglingであるためです。あなたが探していることは次のとおりです。

if (in_array($input, $arr['test'], true)) { 

それは===代わりの==に基づく平等のテストを強制します。

in_array('hey', array('soap' => true)); // true 

in_array('hey', array('soap' => true), true); // false 

より良いあなたがこれで遊ぶことができるタイプのジャグリングを理解するために:あなたがいる場合キー配列が設定されて(というよりもされたかどうかを知りたい場合は

var_dump(true == 'hey'); // true (because 'hey' evaluates to true) 

var_dump(true === 'hey'); // false (because strings and booleans are different type) 

更新

値が存在する場合)、を次のように使用してください。

if (isset($arr['test'][$input])) { 
    // array key $input is present in $arr['test'] 
    // i.e. $arr['test']['hey'] is present 
} 

アップデート2

配列のキーの存在をテストすることができますarray_key_exists()もあります。ただし、対応する配列値がnullになる可能性がある場合にのみ使用してください。

if (array_key_exists($input, $arr['test'])) { 
} 
+0

ああ、そうだ。また、各配列キーの値も調べています。 – John

+0

@ジョンこれは実際に**のみ**これらを見ている。 – ComFreek

+0

@ジョンあなたが何か他のものを探していた場合に備えて、私は答えを更新しました。 –

2

配列として辞書を使用していますが、配列のように使用する場合はin_array関数を使用します。 the documentationを確認してください。

+0

だから、私は配列をmissusingよ言っている行うには、よりスマートな方法がある場合は、達成しようとして何イム、ellobarateしてください。 – John

+0

@John 'in_array()'は値を検索します。それで、それは各項目を通過し、それを針に対してチェックします。しかし厳密なモードを使用していない場合、 'true == 'hey''はTRUEに評価されます。ジャックの答えに私の編集を参照してください。 – ComFreek