您现在的位置是:自如初>PHP基础PHP基础

PHP安全之道之数组比较比较缺陷

小白 2020-10-11 22:01:15 PHP基础 368人已围观

简介当使用in_array()或array_search()函数时,如果$strict参数没有设置为true,则in_array()或array_seach()将使用松散比较来判断$needle是否在$haystack中。

当使用in_array()或array_search()函数时,如果$strict参数没有设置为true,则in_array()或array_seach()将使用松散比较来判断$needle是否在$haystack中。

in_array — 检查数组中是否存在某个值

in_array( mixed $needle, array $haystack[, bool $strict = FALSE] ) : bool

array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名

array_search( mixed $needle, array $haystack[, bool $strict = false] ) : mixed

问题示范

<?php
   
$arr   = [0,1,3,'5'];
$sear1 = 'www.ziruchu.com';
$sear2 = '1www.ziruchu.com';
var_dump(in_array($sear1, $arr));   // true
var_dump(array_search($sear1, $arr));  // 下标:0
var_dump(in_array($sear2, $arr));   // true
var_dump(array_search($sear2 , $arr));  // 下标:1

由结果可见,结果在我们的意料之外。如使用in_array()检查数组中是否存在$sear1时尽然为true,这显示不是我们所要的结果,不是我们所要的结果,那就是错误。

解决之道使用严格检查

<?php
   
$arr   = [0,1,3,'5'];
$sear1 = 'www.ziruchu.com';
$sear2 = '1www.ziruchu.com';
var_dump(in_array($sear1, $arr , true));   // false
var_dump(array_search($sear1, $arr ,true));   // false
var_dump(in_array($sear2, $arr ,true));    // false
var_dump(array_search($sear2 , $arr ,true));  // false

我是小白,期待和优秀的你一起同行!


  小白

  2020年10月11日

很赞哦!(3)

文章评论

登录 注册

自如初--时间轴

站名:自如初

独白:向前走!向前走!

邮箱:457969743@qq.com

站点信息