2017-02-13 16 views
6

Mam tablicę z wartościami:Dlaczego PHP traci wartość elementu tablicy?

$array1 = array('Boss', 'Lentin', 'Endless'); 
print_r ($array); 

wynik będzie:

Array ([0] => Boss [1] => Lentin [2] => Endless 

Jest ok.

Ale jeśli dodaję dwa elementy do tej tablicy za pomocą klawiszy, element "Boss" zostanie utracony.

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 
print_r ($array2); 

Rezultatem będzie:

Array ([1] => Doctor [2] => Lynx [3] => Lentin [4] => Endless) 
//Where is "BOSS"??? 

Dlaczego?

+0

Składnia jest bardzo ważne. Więc patrzysz na swój dziennik błędów, gdy rzeczy nie działają! – RiggsFolly

+0

Nie ma żadnych błędów i problemów z składnią. – Weltkind

+0

Będziesz musiał utworzyć dwuwymiarową tablicę do przechowywania więcej niż jednej wartości. –

Odpowiedz

8

gdy PHP utworzyć tablicę ustawić Doctor w indeksie 1 i Boss wskaźnika 2, ale 2=>'Lynx' przyczyną wskaźnik php nadpisywania 2 i ustawić Lynx w nim.

Można ustawić po ustawionym indeksie lub użyć do niego indeksu. Na przykład jak

$array2 = array("1"=>'Doctor', 2=>'Lynx', 'Boss', 'Lentin', 'Endless'); 
// or 
$array2 = array("1"=>'Doctor', 2=>'Boss', 3=>'Lynx', 'Lentin', 'Endless'); 
3

problem został klucze indeksowe

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 
print_r ($array2); 

To dlatego, że na indeksie 1 jest już lekarz, szef będzie drugim, który zostanie zastąpiony przez Lynx, które mają ten sam indeks 2, gdzie boss zostanie zastąpiony.

Mam nadzieję, że jestem jasny.

5

Gdy $ tablica jest tworzony, „Boss” najpierw być przechowywane w indeksie 2 (Array([2] =>'Boss') który następnie zastępowane przez „Lynx”

3

spodziewane jest zachowanie od php (patrz http://php.net/manual/en/language.types.array.php#example-57). Jeśli potrzebujesz wszystkich wartości w tablicy i nie potrzebujesz pracować z kluczami, polecam użyć array_push($array $value). W przeciwnym razie powinieneś dodać wszystkie wartości za pomocą swoich kluczy i pamiętać, że dla PHP 1 i "1" i true są takie same wartości, więc będą nadpisywać się nawzajem.

+0

To nie to samo co w instrukcji. – Weltkind

+0

Który podręcznik masz na myśli? W zamieszczonym przeze mnie linku jest napisane: "Ponieważ wszystkie klawisze w powyższym przykładzie są rzutowane na 1, wartość zostanie nadpisana na każdym nowym elemencie, a ostatnia przypisana wartość" d "jest jedyną pozostałą.". ==> W twoim przykładzie najpierw ustawiasz "" 1 "=>" Doktor ", więc klucz jest zmuszony do" 1 ". Następny jest bez klucza, więc tylko wartość poprzedniego jest zwiększana do "2". Kontynuujesz ustawianie '2 => 'Lynx'', ale klucz' 2' jest już używany w 'Boss' i dlatego jest on zamieniany na nową wartość' Lynx'. W końcu "Boss" w ogóle nie występuje w tablicy. –

2

array() to konstrukcja z dynamicznymi argumentami reprezentującymi tablice znaków. Przypisanie podanych wartości do struktury macierzy odbywa się kolejno , tj. Jeden po drugim od lewej do prawej. W przykładzie:

  1. Doctor przypisany indeks 1.
  2. Boss przypisany indeks 2.
  3. Lynx zastąpienie indeks 2.
  4. Lentin i Endless są przypisane do wskaźnika 3 i 4, odpowiednio.
1

hej @Weltkind przede wszystkim proponuję czytać „http://php.net/manual/en/language.types.array.php

teraz do swojej odpowiedzi w PHP kluczem Tablica może być ciąg znaków lub liczbę całkowitą, a jeśli nie wymień klucz, następnie domyślna liczba całkowita jest ustawiona, a wartość następnego klawisza tablicy jest zależna od poprzedniego klawisza liczby całkowitej oznacza

następny klucz tablicy = poprzednia liczba całkowita klucz + 1;

w PHP tablicy taka sama wartość klucza spowoduje zastąpienie przez ten sam klucz

Teraz pozwala zrozumieć z tablica2:

<?php 
$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 

1), jak zacząłeś swoją tablicę z kluczem "1", więc dla pierwszej wartości klucza jest [1] => "Doktor"

macierz prądu jak: pole ([1] => 'Lekarz')

się następny klucz = poprzedni klucz całkowitą (to znaczy 1) + 1 = 2;

2) do wartości 2 klucza znajduje się w [2] => 'BOSS'

macierz prądu jak: pole ([1] => 'medyczna', [2] => 'BOSS')

3) następny klucz = poprzednia liczba całkowita klucz (to znaczy 2) + 1 = 3 przeniesie do następnego klucza, ale jako następny klawisz jest [2] => "Ryś", jak wspomniałeś o tym przy klawisz [2] wartość zostanie nadpisana przez wartość "BOSS" do "Lynx"; Prąd Tablica jak: pole ([1] => 'medyczna', [2] => 'Lynx')

teraz następny przycisk mamy jest [3]

4) dla następna wartość to [3] => 'Lentin'

aktualna tablica jak: array ([1] => 'Doctor', [2] => 'Lynx', [3] => 'Lentin');

teraz następny klucz = poprzedni klucz integer (czyli 3) + 1 = 4;

5) dla kolejnej wartości klucza w [4] => 'bez końca'

macierz prądu jak: pole ([1] => 'medyczna', [2] => 'Lynx' [3 ] => 'Lentin', [4] => 'Endless');

i dlatego ostateczne tablica jest jak poniżej:

array(
     [1] => 'Doctor', 
     [2] => 'Lynx', 
     [3] => 'Lentin', 
     [4] => 'Endless' 
    );