2013-03-24 14 views
6

Podczas korzystania phparray_fill i ujemnych indeksów, dlaczego tylko php wypełnić pierwszy negatywny indice a następnie przejść do 0.php - array_fill indeksy ujemne

Na przykład:

array_fill(-4,4,10) powinien wypełnić -4, -3, -2, -1 i 0 ale ma -4, 0, 1, 2, 3

W podręczniku opisano to zachowanie, ale nie dlaczego.

Czy ktoś może powiedzieć, dlaczego tak jest?

+0

"To nie jest błąd, to funkcja". – Voitcus

+0

Jeśli nie możesz znaleźć faceta, który zaimplementował to, nie sądzę, że pytanie "dlaczego to zrobili" jest naprawdę odpowiedzialne. – deceze

Odpowiedz

4

Patrząc na źródło PHP, widzę dokładnie, dlaczego to zrobili!

To, co robią, to utworzenie pierwszego wpisu w tablicy. W PHP, to wygląda:

$a = array(-4 => 10); 

Potem dodać każdy nowy wpis tak:

$count--; 
while ($count--) { 
    $a[] = 10; 
} 

Jeśli zrobisz to dokładnie to samo siebie, zobaczysz dokładnie takie samo zachowanie. Super krótki skrypt PHP pokazuje to:

<?php 
    $a = array(-4 => "Apple"); 
    $a[] = "Banana"; 
    print_r($a); 
?> 

Rezultat: Array ([-4] => Apple [0] => Banana)

UWAGA Tak, podał w PHP zamiast źródła C one wykorzystywane, ponieważ programista PHP może zrozumieć, że dużo lepsze niż surowe źródło. Jest mniej więcej taki sam efekt, ponieważ używają funkcji PHP do generowania wyników ...

+0

Ale ten kod źródłowy nie wyjaśnia DLACZEGO – Voitcus

+0

Tak właśnie sądzę. Dlaczego, moim zdaniem, wynika to z lenistwa z ich strony. Może to być jedna z tych dogmatycznych koncepcji programistycznych, że negatywne wskaźniki w tablicy są złe, ale nie mówią w komentarzach ani nic takiego ... –

2

Może dlatego, że jest zawarta w dokumencie: http://www.php.net/manual/en/function.array-fill.php

Jeśli START_INDEX jest ujemna, pierwszy indeks zwróconej tablicy będzie START_INDEX oraz następujące indeksy rozpocznie się od zera (patrz przykład).

+0

Plakat poprosił o przemyślenie, dlaczego takie zachowanie jest zapewniane, ponieważ strona podręcznika nie jest opracowywana. – Bobulous

+0

, więc uważasz, że powinniśmy otworzyć źródła php, spojrzeć na to zachowanie zakodowane i spróbuj zgadnąć, dlaczego tak patrzy na inne powiązane fragmenty kodu? Nie wyobrażam sobie żadnego innego sposobu na wyjaśnienie tej rzeczy. – Alexey

+0

O to właśnie pyta. Jeśli nie uważasz, że pytanie należy do SO, oznacz to jako nieodpowiednie i niech moderator podejmie decyzję. – Bobulous