发电机钥匙铸造

让我以PHP文档中数组键的引号开始这个问题

如果未指定键,则采用现有整数索引的最大值,并且新键将是该最大值加1(但至少为0)。如果尚无整数索引,则键将为0(零)。

因此,让我们在以下代码中尝试一下:

print_r(['4'=> 1, 2, 3]); // output: Array([4] => 1 [5] => 2 [6] => 3)

*请注意,数组中的第一个键是字符串witch将由PHP强制转换为整数类型[4]

现在让我们在生成器函数中尝试一下,并逐一产生数组键,看看会发生什么

function foo() {
    yield '4' => 1;
    yield 2;
    yield 3;
}

print_r(iterator_to_array(foo()));// output: Array([4] => 1 [0] => 2 [1] => 3)

我知道生成器的行为不像数组,但是让我们看看当第一个键实际上是整数时会发生什么:

function foo() {
    yield 4 => 1; // Note 4 here is an integer
    yield 2;
    yield 3;
}

print_r(iterator_to_array(foo())); // output: Array([4] => 1 [5] => 2 [6] => 3)

输出是预期的。

那么,为什么只有在PHP将生成器中的键强制转换后才会发生这种情况?这是正常现象吗?

jspit

如果数组中的键是数字字符串,则它将由PHP强制转换为整数类型。在生成器中,数字字符串键不会转换为整数。如果要保留键类型,则不得使用iterator_to_array函数。

function foo() {
    yield '4' => 1;  
    yield 2;
    yield 3;
}

foreach(foo() as $key => $value){
  var_dump($key);
}

输出:

string(1) "4"
int(0)
int(1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章