$arr = array(
'test' => array(
'soap' => true,
),
);
$input = 'hey';
if (in_array($input, $arr['test'])) {
echo $input . ' is apparently in the array?';
}
結果:ねえ、どうやらアレイにありますか?
私には意味がありません。理由を説明してください。そして、どうすればこれを修正できますか?
$arr = array(
'test' => array(
'soap' => true,
),
);
$input = 'hey';
if (in_array($input, $arr['test'])) {
echo $input . ' is apparently in the array?';
}
結果:ねえ、どうやらアレイにありますか?
私には意味がありません。理由を説明してください。そして、どうすればこれを修正できますか?
これは、型ジャグリングtrue == 'hey'
が原因です。あなたが探しているのは:
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)
アップデート
(値が存在するかどうかではなく)配列キーが設定されているかどうかを知りたい場合は、次のisset()
ように使用する必要があります。
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'])) {
}
配列を辞書として使用していますが、in_array
配列のように使用する場合は関数を使用します。ドキュメントを確認してください。