我没有得到这个代码的错误.它返回"发现",它不应该.
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if (in_array($lead,$diff))
echo "Found";
else
echo "Not found";
Run Code Online (Sandbox Code Playgroud)
Mar*_*eed 139
注意:此行为在PHP 5.4中已更改.
默认情况下,in_array
使用松散比较(==
),这意味着数字字符串将转换为数字并作为数字进行比较.在PHP 5.4之前,如果你的平台的浮点类型没有足够的精度,那么差异就会丢失,你得到了错误的答案.
解决方案是通过将额外参数传递给:来打开strict
comparison(===
):Boolean
in_array
$lead = "418176000000069007";
$diff = array("418176000000069003", "418176000000057001");
if ( in_array($lead, $diff, true) )
echo "Found";
else
echo "Not found";
Run Code Online (Sandbox Code Playgroud)
然后将字符串作为字符串进行比较,不进行数字强制.但是,这意味着您会丢失默认的字符串等效项,如"01234"和"1234".
此行为被报告为错误并在PHP 5.4中修复.与之相比,数字字符串仍会转换为数字==
,但前提是字符串的值适合平台的数字类型.
aru*_*run 56
正是由于存储数量的限制PHP
,这是一个错误,并在新版本中得到纠正和解决PHP
.
价值超过PHP_INT_MAX
.
试着echo
/ print_r
$lead
和$diff
不使用引号.它会导致
$lead ---> 418176000000070000
$diff ---> Array ( [0] => 418176000000070000 [1] => 418176000000060000 )
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下in_array
结果是真的!
所以通过在as中设置第三个参数来使用strict
比较in_array()
in_array()
true
if(in_array($lead,$diff,true)) //use type too
echo "Found";
else
echo "Not found";
?>
Run Code Online (Sandbox Code Playgroud)
试试这个.它会工作.
Nau*_*hal 16
这是因为PHP中存在一个缺陷.418176000000069007
被修改为2147483647(PHP的整数限制).这就是你得到的原因Found
.
尝试 in_array($lead, $diff, true)
If the third parameter strict is set to TRUE then the in_array()
function will also check the types of the needle in the haystack.
Run Code Online (Sandbox Code Playgroud)
in_array
应该是严格的.
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if(in_array($lead,$diff,true))
echo "Found";
else
echo "Not found";
Run Code Online (Sandbox Code Playgroud)
此问题是由于您的数字超出了定义的整数限制
注意:最大值取决于系统.32位系统的最大有符号整数范围-2147483648
为2147483647
.因此,例如在这样的系统上,intval('1000000000000')
将返回2147483647
.64位系统的最大有符号整数值是9223372036854775807
.
归档时间: |
|
查看次数: |
7204 次 |
最近记录: |