6

使用php array_fill和负索引时,为什么php只填充第一个负索引然后跳转到0。

例如:

array_fill(-4,4,10)应该填写-4, -3, -2, -10但确实如此-4, 0, 1, 2, 3

该手册确实说明了这种行为,但没有说明原因。

谁能说这是为什么?

4

2 回答 2

4

查看 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 函数来生成结果......

于 2013-03-24T21:28:17.083 回答
2

也许是因为它在文档中说明:http ://www.php.net/manual/en/function.array-fill.php

如果 start_index 为负数,则返回数组的第一个索引将为 start_index 并且以下索引将从零开始(参见示例)。

于 2013-03-24T21:18:10.733 回答