php数组is_array返回false,in_array('01',array('1'))为什么返回true

'01' == '1'; 结果是 TRUE

echo TRUE 结果是 1

/* {{{ 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值