我对in_array()
的结果有些麻烦。这不像我期望的那样,并且我理解手册。
简单测试:
$_aOperatorsOneOptin = array('DE-010', 'DE-005');
$bMatchPaymentOperator = in_array(0 , $_aOperatorsOneOptin);
if($bMatchPaymentOperator)
echo 'found';
我希望我不会得到这个结果,但$ bMatchPaymentOperator是真的!
我希望
$bMatchPaymentOperator = in_array('DE-010' , $_aOperatorsOneOptin);
是真的,它是。 但为什么哦,为什么上层陈述是真的?
答案 0 :(得分:4)
使用in_array
的第三个参数强制严格匹配
<?php
$_aOperatorsOneOptin = array('DE-010', 'DE-005');
$bMatchPaymentOperator = in_array(0 , $_aOperatorsOneOptin, true);
if($bMatchPaymentOperator == true)
echo 'found';
答案 1 :(得分:3)
这是因为当你将数字与php中的字符串进行比较时,php会在进行比较之前将字符串转换为数字。不以数字开头的字符串将转换为0,因此0 == 'hello world';
您可以通过将true
作为第三个参数传递给in_array()
来强制in_array检查数据类型以及完全匹配的内容。
$_aOperatorsOneOptin = array('DE-010', 'DE-005');
$bMatchPaymentOperator = in_array(0, $_aOperatorsOneOptin, true);
if($bMatchPaymentOperator)
echo 'found';
有关比较的详情,请参阅http://php.net/manual/en/language.operators.comparison.php。
答案 2 :(得分:2)
由于PHP的真实/虚假的怪异,我期待。尝试:
$bMatchPaymentOperator = in_array('0' , $_aOperatorsOneOptin);
答案 3 :(得分:2)
必须在引号中:
$bMatchPaymentOperator = in_array('0' , $_aOperatorsOneOptin);
var_dump($bMatchPaymentOperator);
结果:bool(false)
答案 4 :(得分:1)
奇怪的行为正在发生,因为0 == "this is a string"
即php中的0 = any string
只是查看这个简单的例子
<?php
if( 0 == "this is a string"){
echo("true");
}
else{
echo("false");
}
?>
输出:true
因此in_array函数显示了这种奇怪的行为
为了使你的代码工作,只需将in_array的严格参数添加到true
检查此代码
<?php
$_aOperatorsOneOptin = array('DE-010', 'DE-005');
$bMatchPaymentOperator = in_array(0,$_aOperatorsOneOptin,true);
if($bMatchPaymentOperator){
echo 'found';
}
else{
echo "Not found";
}
?>
输出:未找到