in_array('01',array('1'))为什么返回true
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了in_array('01',array('1'))为什么返回true,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2294字,纯文字阅读大概需要4分钟。
内容图文
![in_array('01',array('1'))为什么返回true](/upload/InfoBanner/zyjiaocheng/237/6c06ddd3e87c4731b6109c712b8ff11f.jpg)
echo in_array('01',array('1'))
在使用in_array不采用strict时,为什么返回1,怎么判断的?
回复内容:
echo in_array('01',array('1'))
在使用in_array不采用strict时,为什么返回1,怎么判断的?
in_array($needle, $haystack) — 检查数组中是否存在某个值
你可以理解为依次取数组中的值,然后跟 $needle 做比较。如果 == 判断成立则返回 true.类似伪代码:
function in_array($needle, $haystack) {
foreach($haystack as $val) {
if ($val == $needle) {
return true;
}
}
return false;
}
注意:在 PHP 中 == 同 === 的差别。
var_dump(("01" == 1));
var_dump((" 1 " == 1));
然后你就明白了
补充一下:
就楼主问题来说, in_array 判断 字符串和数字是否相等时对输入的字符串 “01” 进行了取值。详细情况可以参见: PHP类型比较表 - PHP官方网站 php.com
-
'01' == '1';
结果是 TRUE -
echo TRUE
结果是 1
再附一个《PHP 类型比较表》http://php.com/manual/zh/types.comparisons.php
in_array
源码定义在 https://github.com/php/php-src/blob/master/ext/standard/array.c
/* {{{ proto bool in_array(mixed needle, array haystack [, bool strict])
Checks if the given value exists in the array */
PHP_FUNCTION(in_array)
{
php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */
继续搜索 php_search_array
的源码,当使用非严格模式时,调用 fast_equal_check_function
函数,借助 github 的搜索功能,快速定位到 Zend/zend_operators.h 文件
static zend_always_inline int fast_equal_check_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
{
if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
return Z_LVAL_P(op1) == Z_LVAL_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
return ((double)Z_LVAL_P(op1)) == Z_DVAL_P(op2);
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
return Z_DVAL_P(op1) == Z_DVAL_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
return Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2));
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
if (Z_STR_P(op1) == Z_STR_P(op2)) {
return 1;
} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
return 0;
} else {
return memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0;
}
} else {
zendi_smart_strcmp(result, op1, op2);
return Z_LVAL_P(result) == 0;
}
}
}
compare_function(result, op1, op2 TSRMLS_CC);
return Z_LVAL_P(result) == 0;
}
内容总结
以上是互联网集市为您收集整理的in_array('01',array('1'))为什么返回true全部内容,希望文章能够帮你解决in_array('01',array('1'))为什么返回true所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。