加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 将null作为array_keys第二个参数传递

发布时间:2020-12-13 17:22:20 所属栏目:PHP教程 来源:网络整理
导读:PHP文档声明 default value of array_keys second argument为NULL. 但是,当显式传递NULL时,array_keys似乎无法正常工作. 例: 码 $a = array(10='a',11='b',12='b',13='c',14='c',15='b');$keys = array_keys($a);var_dump($keys); //Output 0$keys = array_
PHP文档声明 default value of array_keys second argument为NULL.

但是,当显式传递NULL时,array_keys似乎无法正常工作.

例:

$a = array(10=>'a',11=>'b',12=>'b',13=>'c',14=>'c',15=>'b');

$keys = array_keys($a);
var_dump($keys); //Output 0

$keys = array_keys($a,null);
var_dump($keys); //Output 1

产量

array
  0 => int 10
  1 => int 11
  2 => int 12
  3 => int 13
  4 => int 14
  5 => int 15

array
  empty

我估计它必须试图找到值为null的键.

传递false或空字符串会产生完全相同的行为(显然).

那么,默认值是多少?

回答

xdazz answer is right.在检查这个函数的C代码时,我的第一个问题是这是C级的错误实现(通过删除代码很容易修复)

但后来我意识到这实际上是预期的行为,因为他们遇到了很多麻烦,使你能够测试数组中的NULL值.

解决方法

这里的默认值很难解释.

这是特例,第二个参数的默认值实际上不是php的NULL,而是C级的NULL.

深入了解源代码:

PHP_FUNCTION(array_keys)
{
  zval *input,/* Input array */
       *search_value = NULL,/* Value to search for */
  //....
  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"a|zb",&input,&search_value,&strict) == FAILURE) {
    return;
  }
  // ....

您可以看到,search_value的默认值为NULL,但如果您指定了array_keys的第二个参数,则在zend_parse_parameters之后,search_value将不为NULL.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读