gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:56:34 26 4
gpt4 key购买 nike

PHP 文档指出 default value of array_keys second argumentNULL

但是,当显式传递 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_parameterssearch_value 不会是NULL

关于php - 将 null 作为 array_keys 的第二个参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com