[php] in_array 判断问题

php判断文件上传图片格式的实例详解 php判断文件上传图片格式的实例详解 判断文件图片类型, $type = $_FILES['image']['tmp_name'];//文件名 //$type = $this->getImagetype( $type ); $filetype = ['jpg', 'jpeg', 'gif', 'bmp', 'png']; if (! in_array($type, $filetype)) { return "不是图片类型"; } 如上如果用户修改文件后缀为png jpeg等无法满足,查了查资料解决方法是采用判断文件的二进制流信息,如果你刚好遇到这种问题不妨尝试一下: 立即下载
<?php
$arr = array("Linux");
if (in_array(0, $arr)) {
    echo "match";
}
?> 

执行以上代码,0和字符串是可以匹配成功的。

原因是在in_array,如果比较的类型不匹配,并且第一个参数是0,它会返回true(不正确)。

查手册:

If the third parameter strict is set to TRUE then the in_array() function will also check thetypes of theneedle in thehaystack.  

加上类型比较后返回false(正确)

查资料发现:

http://hi.baidu.com/cnkarl/item/9eb1505653a72bc59e2667dd 

摘录如下:

1.情况一

$test = 'a';

$array = array('a', 'b', 'c');

if (in_array($test, $array)) {

echo 'in array';

} else {

    echo 'no';

}

//output: in array

 

2.情况二

$test = 'other value';

$array = array('a', 'b', 'c');

if (in_array($test, $array)) {

echo 'in array';

} else {

    echo 'no';

}

//output: no

------------------------ 看似一切都正常的分割线 -----------------------

3.情况三

$test = 0;

$array = array('a', 'b', 'c');

if (in_array($test, $array)) {

    echo 'in array';

} else {

    echo 'no';

}

//output: in array

难以置信,这不坑爹吗,0不在列表中,但是这个函数返回true。这个函数很常用,所以当某些巧合出现后,就会导致不可预料的错误。

一开始我猜测in_array函数除了在values中寻找,还会去寻找keys,后来发现不是这样的。


4.情况四

$test = '0';

$array = array('a', 'b', 'c');

if (in_array($test, $array)) {

    echo 'in array';

} else {

    echo 'no';

}

//output: no

是不是很有意思


5.原来是因为:

http://www.php.net/manual/en/language.operators.comparison.php

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

php比较数字和字符串时,会尝试将字符串转换为数字再进行比较。 例子中的 'a', 'b', 'c' 转成数字都是0,所以和0相等,in_array就返回了true。


6.如何避免

PHP的类型戏法是把双刃剑,有时候很爽,有时候很贱。

所以当in_array的needle与array中的值类型是否相同还不确定时,最好设置in_array函数的第三个参数 strict = true,这样在检查的时候会检查类型,数字与字符串就不会偷偷相等,也就避免类似这种问题。

$test = 0;

$array = array('a', 'b', 'c');

if (in_array($test, $array, true)) {

    echo 'in array';

} else {

    echo 'no';

}

//output: no


Latex里面关于作者名字显示有灰色; 二级+三级标题斜体; Latex里面关于 作者名字显示有灰色; 二级+三级标题斜体,与正文的距离; 邮箱字体;ORCID字体设置(整理不易,请先关注,Thanks) 阅读详情

相关推荐

安信可TB蓝牙模组系列 实战Ble Mesh智能照明系统搭建

本文详细介绍了如何使用安信可TB蓝牙模组系列搭建Ble Mesh智能照明系统。从硬件准备、固件烧录到手机APP组网全流程,提供了实战步骤和优化建议,特别适合智能家居开发者入门。Ble Mesh的自组网能力解决了蓝牙传输距离限制,实现全屋灯光智能控制。

weixin_30856725的博客 353

php函数in_array奇怪现象

$k = 0; $fieldArr = array('tt', 'bb'); if ( in_array( $k, $fieldArr)) { echo '1'; } 按理来说,是不会输出1的,但是最后输出1, 是不是in_array函数使用的时候会转类型呢,卖个关子,看了源码告诉大家

zvivs的专栏 1003

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2531

php怎么上传所有格式的图片,php判断文件上传图片格式的实例详解

php判断文件上传图片格式的实例详解判断文件图片类型,$type = $_FILES['image']['tmp_name'];//文件名//$type = $this->getImagetype( $type );$filetype = ['jpg', 'jpeg', 'gif', 'bmp', 'png'];if (! in_array($type, $filetype)){retu...

weixin_39538500的博客 188

Unity特效序列帧输出全攻略:Recorder+Timeline保姆级教程(解决透明通道问题)

本文提供Unity特效序列帧输出的完整解决方案,重点讲解如何结合Recorder与Timeline工具,实现带透明通道的PNG序列帧高效输出。通过保姆级教程,详细解析摄像机隔离、层级设置、参数配置等关键步骤,并深度解决透明通道丢失等常见问题,帮助特效师和动画师打通引擎创作与后期合成的工作流。

tensorflowjs6的博客 430

第八篇 永磁同步电机控制-MTPA、MTPV

MTPA 的全称是 Maximum Torque Per Ampere,即 最大转矩电流比控制。核心思想:在输出特定转矩时,通过控制定子电流的幅值和相位(即d轴和q轴电流的分量),使得所需要的定子电流幅值最小。通俗理解:就是用“最省电”的方式产生所需要的力矩。就像开车时,找到一个最合适的油门和档位配合,使得在输出相同动力时,油耗最低。

深耕汽车电子:AUTOSAR、电机控制,助力数字汽车 1874

PHP in_array() 之判断坑

前几天因为老数据库的一个字段,真是引发了好多坑,然后深入了解了一下 `gender` tinyint(4) DEFAULT NULL COMMENT '性别 0女 1男', //不要问我为什么这样存,我也想问 然后数据可能会产生三种情况 (NULL)(0)(1) in_array语法: in_array(search,array,type),type可选。如果设置该参数为 true,...

༺墨༒眉༻ 571

calibration的“前世今生”——从simulink开发到CANape的XCP标定

整体思路 备注: elf可简单的看作为hex和map的集合,其中包括可执行的程序、变量及其对应的地址(simulink生成代码是也可以勾选生成ASAP2的a2l文件,有变量但变量对应的地址为空,只有编译后才分配地址) 定义变量是观测值还是标定值需要在simulink中的数据字典定义变量存储类型,详见simulink系列。 1. 前期准备A2L的制作 安装完成CanApe软件 , 插上CanApe硬件( 如:vector 1640A)。打开A2L编辑软件 ASAP2 Editor(注意不是ASAP2 Vi

IHTY_NUI的博客 1万+

in array php 坑,php – 为什么in_array()返回意外/奇怪的结果?

解决方案(简而言之):使用in_array()始终使用第三个参数strict true:$arrayWithTrue = ['Andreas',$arrayWithTrue,true)); // returns bool(false)var_dump(in_array(0,$arrayWithNull,true)); // returns bool(false)var_dump(in_array(...

weixin_34518190的博客 493

华为OD机考双机位C卷 - 完美走位 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 完美走位(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 1125

【WRF-Urban】Registry.EM_COMMON文件概述及urban有关变量

Registry.EM_COMMON文件概述及urban有关变量

WW、forever的博客 1595

php中in array函数_PHP中in_array函数使用的问题与解决办法

先介绍一下需求背景:发票方式:0=捐赠(不要问我为什么,历史原因)1=对中寄送2=索取3=电子发票现在要对用户提交的数据进行检测:php;auto-links:false;">if(!in_array($_POST['invoice_action'], array(0,1,2,3))){throw new Exception('请选择正确的发票方式');}这个时候出现一个问题,如果压根就不存...

weixin_42129113的博客 489

鸿蒙开发实战项目(九十二):HUAWEI Health血压测量

是华为开发的用于运动健康领域的一个开放平台, 三方APP可以借助HUAWEI Health开放平台提供的。

斌擎科技 1133

php数组nn从外围1递增,[php] in_array 判断问题

$arr = array("Linux");if (in_array(0, $arr)) {echo "match";}?>执行以上代码,0和字符串是可以匹配成功的。原因是在in_array,如果比较的类型不匹配,并且第一个参数是0,它会返回true(不正确)。查手册:If the third parameter strict is set to TRUE then the in_array...

weixin_34786066的博客 151

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[php] in_array 判断问题(坑)

<?php $arr = array("Linux"); if (in_array(0, $arr)) { echo "match"; } ?> 执行以上代码,0和字符串是可以匹配成功的。 原因是在in_array,如果比较的类型不匹配,并且第一个参数是0,它会返回true(不正确)。 查手册:If the third parame...

weixin_30764771的博客 255

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题

大家可能都用过in_array来判断一个数据是否在一个数组中,一般我们的数组可能数据都比较小,对性能没什么影响,所以也就不会太在意。 但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现): 1.数组key与value翻转,通过isset判断key是否存在于数组中 复制代码代码如下:

ltx06的专栏 1168

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

php上传图片,解决in_array无效的问题,以及判断图片格式类型

上传图片

wry_developer的博客 1883

php array 根据value获取key,in_array()判断是否在数组内实例

php array 根据value获取key,in_array()判断是否在数组内实例 <?php header("Content-type: text/html; charset=utf-8"); $categoryids = array ('2' => '生活','103' => '法律', '104' => '宗教', '105' => '民俗' ...

weixin_30794491的博客 113

PHP数组搜索避坑指南(array_search返回键常见错误全解析)

掌握PHP数组搜索技巧,避免array_search返回键常见错误。详解其在关联数组中的应用、返回键的原理及注意事项,帮助开发者精准定位数据。涵盖类型匹配、false误判等关键问题,提升代码可靠性,值得收藏。

PixelFlow的博客 854

php in_array隐式转,PHP中in_array的隐式转换的解决方法

问题今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是int和string两种类型,为了校验方便,我打算把所有的参数都放在数组中,然后用in_array(0, $param)判断 int 参数是否为0,再单独判断string参数是否为空,示例代码如下:if(in_array(0, $param) || $param['img'] == '') {$this->errorCode ...

weixin_42519170的博客 121

php数组测试,在PHP中针对数组测试变量

我想我应该使用in_array(),但由于某种原因,它给了我不准确的信息.我查看了array_search()和array_key_exists(),但看起来这只有在我的数组中有一个键和值时才有用.简而言之,我运行一个条件来获取当前的EST时间和日期,并确定它是“在几小时内”还是“在下班后”.所以现在是星期二的19:00,这应该说是“非工作时间”,但是它回应“在工作时间”,我错过了什么?示例代码:...

weixin_29205061的博客 107

in_array,最好将第三个参数设置为true

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33859231的博客 145

处理assignment in condition警告——让代码严谨的一个小改进

问题主要出在这一句 while ($row=mysql_fetch_array($query)) { .... } 在zendstudio里会出现黄色的warning,提示说:assignment in condition。 出现这样的问题代码是可以继续正常执行的,但是写法不太严谨,因为在while/if的条件中,系统期望的是一个布尔类型的值,当表达式传递的结果非布尔值类型时,...

anfum29604的博客 4028

php中字符处理注意的问题(1)

[b]1. in_array()函数[/b] [code="java"]$zero = "0"; $za = array("00"); if(in_array($zero, $za, true)){ echo 'in'; }else{ echo 'not in'; }[/code] 这段代码应该输出什么?答案是in,而不是not in。 然后测试一下这个: [code...

两天 208

学会php又忘了,php开发时容易忘记的一些技术细节

在做开发的时候,有可能会忘记掉一些技术细节。这些细节有可能会造成很严重的后果,比如网站被注入、网站崩溃等等。现在我们总结一下,有可能会遇到的一些 PHP 中的一些 “陷阱”。陷阱一:empty()//以下代码会直接导致PHP解析错误$arr1 = [1, 2, 3];$arr2 = [3, 4];if(empty(array_diff($arr1, $arr2))) { //解析错误echo 'e...

weixin_39703468的博客 141
上一篇: [MySQL] 设置时区
下一篇: 硬件知识扫盲
Edwingu
博客等级 码龄23年 9粉丝 35原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值