发生器中的键转换

问题描述 投票:1回答:1

让我以PHP Documentation中的数组键作为引号开始这个问题>

如果未指定键,则采用现有整数索引的最大值,并且新键将是该最大值加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将生成器的键转换为生成器时才会发生这种情况?这是正常现象吗?

让我以PHP文档中数组键的引号开始这个问题,如果未指定键,则采用现有整数索引的最大值,而新的键将是最大值...

php arrays generator yield
1个回答
0
投票

在您的上下文中,收益使用数组规则。

© www.soinside.com 2019 - 2024. All rights reserved.