2015-06-04 25 views
7

Jak wiem, w associative arrays, jeśli klucze nie są ustawione, zostaną ustawione automatycznie. Ale wydaje się, nie ma sensu w tym przypadku:W jaki sposób indeksuje tablice asocjacyjne PHP?

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

Wyjścia:

Array ([1] => One [2] => Two) 

Więc gdzie jest '3'?

+0

Skąd to wziąłeś? Tablica asocjacyjna używana do ustawiania własnego klucza niż domyślne klucze –

+0

Dostaję to od [link] (http://php.net/manual/en/function.array.php). Mówi: "Kiedy indeks jest pomijany, automatycznie generowany jest indeks liczby całkowitej, zaczynając od 0. Jeśli indeks jest liczbą całkowitą, następny wygenerowany indeks będzie największym indeksem całkowitym + 1". – Jane

+0

uprzejmie użyj tego kodu i sprawdź go '$ a = array ('1' => 'One', '3', '3' => 'Two'); print_r ($ a); ' –

Odpowiedz

4

w zdefiniowanym przez użytkownika tablicy jesteś przypisywanie klawiszy ręcznie macierzy oznacza jak

array(1 => 'One',3, 2 => 'Two');//[1] => One [2] => 3 [2] => Two 

Tutaj mamy dwa identyczne indeksu i zgodnie DOCS jej wspomnieć, że ostatni zastąpić pierwszy

Składnia "index => wartości", oddzielone przecinkami, zdefiniuj indeks i wartości. indeks może być łańcuchem lub liczbą całkowitą. Gdy wskaźnik jest pominięty, indeks całkowita jest generowany automatycznie, zaczynając od 0. Jeśli indeks jest liczbą całkowitą, następny wygenerowany indeks będzie największym indeks całkowitą + 1.

Zauważ, że gdy dwa identyczne indeksu są zdefiniowane, ostatni nadpisać pierwszy.

W celu odfiltrowania tym przypadku można po prostu wprowadzić pewne zmiany w

array(1 => 'One',2 =>'Two',3) // array ([1] => One [2] => Two [3] => 3) 
array(3,1 => 'One',2 =>'Two') //array ([0] => 3 [1] => One [2] => Two) 
array(1 => 'One',2 => 3 ,3 =>'Two')// array([1] => One [2] => 3 [3] => Two) 

DOCS CHECK PARAMETERS

+0

Nie ma za co ....Sprawdź moją zaktualizowaną odpowiedź @Jane –

+0

Hej @Uchiha, jeszcze jedno pytanie. Jak usunąć wartości, które nie mają przypisanych żadnych kluczy, jak powyżej, przed przetworzeniem tablicy? – Jane

+0

Niestety Nie możesz dostać, możesz pokazać swoje oczekiwane wyniki. –

3

w PHP Kluczem jest opcjonalne. Jeśli nie podano, PHP użyje przyrost największego dotychczas stosowanej całkowitej kluczowego

Ci się, jeśli: -

$a = array(1 => 'One', 3, 3 => 'Two'); 
var_dump($a); 

wyjście będzie: -

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    int(3) 
    [3]=> 
    string(3) "Two" 
} 

Tutaj do drugiej wartości jeden jest przyrost od poprzedniej wartości tj 2.

Teraz

powiedzieć tablica jest: -

$a = array('1' => 'One', '3', '3' => 'Two'); 
var_dump($a); 

wyjściowy będzie

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    string(1) "3" 
    [3]=> 
    string(3) "Two" 
} 

Tutaj również tutaj na jedną druga wartość jest przyrost od poprzedniej wartości I.E 2.

Teraz trzeci przypadek: -

Jeśli tablica jest: -

$a = array('1' => 'One', '1' => 'two' , '1' => 'Three'); 
var_dump($a); 

wyjściowy będzie: -

array(1) { 
    [1]=> 
    string(5) "Three" 
} 

To dlatego asocjacyjna zachować wartość w formie mapy, a jeśli klucz jest obecny to nadpisanie wartości w tym przypadku 1 jest nadpisywane 2 razy, w wyniku czego jest wykonywane trzy kolejne: naszym przypadku: -

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

Wyjście jest

Array 
(
    [1] => One 
    [2] => Two 
) 

To dlatego, że: -

pierwszy klucz mapa będzie: - '1' => 'one'

ponownie

php zachowa sekundę wartość jako '2' => '3'

Teraz jak w tablicy „2” jest przypisany jako „dwa”, wartość stać

'2' => 'Two' co oznacza, że ​​jest nadpisywanie.

+0

Och, widzę! Dziękuję Ci! – Jane

0

@Uchiha ma rację, tylko jako należą do tej odpowiedzi, jeśli chcesz uniknąć tego problemu, należy członków tablicy (które nie mają kluczy określony) w ostatniej


$a = array('1' => 'One', '3', '2' => 'Two'); 

zrzuci

array (size=2) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 


i utrzymanie członków z kluczami niezdefiniowanych w ostatniej

$a = array('1' => 'One', '2' => 'Two', '3'); 

zrzuci

array (size=3) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 
    3 => string '3' (length=1) 


pozwoli uniknąć problemów stoją.