2013-03-24 53 views
6

当使用phparray_fill,负指数,为什么只php填写的首次负指数之,然后跳转到0PHP - array_fill负指数

例如:

array_fill(-4,4,10)应填写-4, -3, -2, -10但它是否-4, 0, 1, 2, 3

该手册没有说明这种行为,但不是为什么。

有谁能说这是为什么?

+0

“这不是一个错误,它是一个功能”。 – Voitcus 2013-03-24 21:27:26

+0

除非你能找到实现它的人,否则我不认为这个问题*“他们为什么这么做”*是真正的答案。 – deceze 2013-03-24 21:32:25

回答

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

+0

但是,这个源代码没有解释为什么 – Voitcus 2013-03-24 21:30:21

+0

嗯,那是我想的。我最好的猜测是,他们为什么懒惰。它可能是教科书编程概念之一,数组中的负指数不好,但他们不会在评论或任何内容中说... – 2013-03-24 21:31:14

2

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

如果START_INDEX为负,则返回数组的第一个指数将START_INDEX和下面的指标将从零开始(见例子)。

+0

海报已经询问了为什么会提供此行为的想法,因为手册页没有详细说明。 – Bobulous 2013-03-24 21:21:02

+0

所以你认为我们应该打开PHP源代码,看看这个行为编码,并试图猜测为什么它如此看待其他相关代码片断?我无法想象任何解释这件事的其他方式 – Alexey 2013-03-24 21:21:53

+0

这就是他所要求的。如果您不认为该问题属于SO,请将其标记为不合适,并让主持人决定。 – Bobulous 2013-03-24 21:23:01