使用php
array_fill和负索引时,为什么php
只填充第一个负索引然后跳转到0。
例如:
array_fill(-4,4,10)
应该填写-4, -3, -2, -1
,0
但确实如此-4, 0, 1, 2, 3
该手册确实说明了这种行为,但没有说明原因。
谁能说这是为什么?
使用php
array_fill和负索引时,为什么php
只填充第一个负索引然后跳转到0。
例如:
array_fill(-4,4,10)
应该填写-4, -3, -2, -1
,0
但确实如此-4, 0, 1, 2, 3
该手册确实说明了这种行为,但没有说明原因。
谁能说这是为什么?
查看 PHP 的源代码,我可以确切地看到他们这样做的原因!
他们所做的是在数组中创建第一个条目。在 PHP 中,它看起来像:
$a = array(-4 => 10);
然后,他们像这样添加每个新条目:
$count--;
while ($count--) {
$a[] = 10;
}
如果你自己做同样的事情,你会看到完全相同的行为。一个超短的 PHP 脚本演示了这一点:
<?php
$a = array(-4 => "Apple");
$a[] = "Banana";
print_r($a);
?>
结果:Array ( [-4] => Apple [0] => Banana )
注意 是的,我确实放入了 PHP 而不是他们使用的 C 源代码,因为 PHP 程序员比原始源代码更能理解这一点。然而,它的效果大致相同,因为它们使用 PHP 函数来生成结果......
也许是因为它在文档中说明:http ://www.php.net/manual/en/function.array-fill.php
如果 start_index 为负数,则返回数组的第一个索引将为 start_index 并且以下索引将从零开始(参见示例)。