2013-03-24 51 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