2013-08-28 11 views
35

Mam połączenie z bazą danych i próbuję dowiedzieć się, co robi $key => $value w pętli foreach.

Powód, dla którego pytam, jest taki, ponieważ oba te kody wypisują to samo, więc próbuję zrozumieć, dlaczego jest napisane w ten sposób. Oto kod:

foreach($featured as $key => $value){ 
    echo $value['name']; 
} 

ten wyprowadza taki sam jak:

foreach($featured as $value) { 
    echo $value['name'] 
} 

Więc moje pytanie brzmi, jaka jest różnica między $key => $value czy tylko $value w pętli foreach. Tablica jest wielowymiarowa, jeśli to robi różnicę, po prostu chcę wiedzieć, dlaczego przekazać $key do $value w pętli foreach.

+0

Przeczytaj o [tablicach PHP] (http://php.net/manual/en/language.types.array.php) i [foreach] (http://php.net/manual/en/control-structures .foreach.php). W twoim przykładzie nie używasz '$ key' w foreach, więc równie dobrze możesz wybrać prostszą wersję. –

+0

Oto, co zwraca tablica: 'Array ( [0] => Array ([id] => 7 [name] => Shoes 2 [thumbnail] => /images/dummy-thumb.jpg) [1] => Array ([id] => 1 [name] => Game 1 [thumbnail] => /images/dummy-thumb.jpg) [2] => Array ([id] => 9 [name] => Koszula 2 [thumbnail] => /images/dummy-thumb.jpg) ) '' '$ key' to' [0] [1] [2] 'a' $ value' to '[id] [nazwa] [thumbnail] "poprawne? – handmdmr

Odpowiedz

56

Cóż, $key => $value w pętli foreach odnosi się do par klucz-wartość w asocjacyjnych , gdzie klucz służy jako indeks do określenia wartości zamiast liczby takiej jak 0,1,2, ... W PHP tablice asocjacyjne wyglądają tak:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.); 

W kodzie PHP: $featured jest asocjacyjna są przelotowe i as $key => $value oznacza, że ​​za każdym razem przebiega pętla i wybiera parę klucz-wartość z tablicy, przechowuje klucz w zmiennej lokalnej $key do użyj wewnątrz bloku pętli i wartości lokalnej zmiennej $value. Tak więc dla powyższej przykładowej tablicy powyżej pętla foreach osiągnie pierwszą parę klucz-wartość, a jeśli podasz as $key => $value, będzie przechowywać 'key1' w zmiennej $key i 'value1' w zmiennej $value.

Ponieważ nie używasz zmiennej $key w bloku pętli, dodanie lub usunięcie jej nie zmienia wyjścia pętli, ale najlepiej jest uwzględnić parę klucz-wartość, aby pokazać, że jest to tablica asocjacyjna .

Należy również pamiętać, że oznaczenie as $key => $value jest arbitralne. Można go zastąpić wartością as $foo => $bar i działałoby poprawnie, o ile zmieni się odwołania do zmiennych wewnątrz bloku pętli do nowych zmiennych, $foo i $bar. Ale czynienie ich $key i $value pomaga śledzić, co mają na myśli.

+3

Dziękuję, to jest odpowiedź, której szukałem. Po prostu myliłem się, gdy zobaczyłem, że zostało użyte w ten sposób bez użycia '$ key' wewnątrz bloku pętli. Po prostu używa go do reprezentowania, że ​​jest to tablica asocjacyjna. Zrozumiałem, jak działa pętla i tablica. Nie tylko dlatego, że był używany w ten sposób bez użycia zmiennej '$ key'. Robiłem to za pomocą klawisza '$ key' var, aby zobaczyć, co zwraca. Jeszcze raz dziękuję :) – handmdmr

+0

bez problemu! Cieszę się, że mogłem pomóc. – djiango

1

tutaj $ klucz będzie zawierać $ klucz związane z $ wartość w $ wyróżniona. Różnica polega na tym, że teraz masz ten klucz.

array("thekey"=>array("name"=>"joe")) 

tutaj $ wartość jest

array("name"=>"joe") 

$ klucz jest "thekey"

3

Powiedzmy, że masz tablicę tak:

$array = (0=>'123',1=>'abc','test'=>'hi there!') 

W swojej pętli foreach, każda pętla będzie:

$key = 0, $value = '123' 
$key = 1, $value = 'abc' 
$key = 'test', $value = 'hi there!' 

To wspaniałe jak na tamte czasy, kiedy trzeba znać klucz tablicy.

+0

Tak więc ustawiamy pętlę w ten sposób, po prostu musimy znać klucz '$ key' ma sens, ponieważ jest to funkcja z modelu w kodzie źródłowym.Więc może potrzebować '$ key' w późniejszym czasie. – handmdmr

+0

Prawidłowe. Możesz również użyć klawisza, aby zmienić wartość tego klucza w tablicy, lub użyć go do dodania danych do innej tablicy przy użyciu tego samego klucza. – aynber

2

jeśli tablica wygląda następująco:

  • $ opisywany [ "owoc"] = "orange";
  • $ featured ["fruit"] = "banana";
  • $ featured ["vegetable"] = "carrot";

kluczem $ odbędzie typ (owocowy lub warzywny) dla każdej wartości Array (pomarańcza, banan lub marchewki)

14

Powiedzmy masz tablicę asocjacyjną takiego:

$a = array(
    "one" => 1, 
    "two" => 2, 
    "three" => 3, 
    "seventeen" => array('x'=>123) 
); 

W pierwszej iteracji: $key="one" i $value=1.

Czasami potrzebujesz tego klucza, jeśli chcesz tylko wartość, możesz jej uniknąć.

W ostatniej iteracji: $key='seventeen' i $value = array('x'=>123) tak, aby uzyskać wartość pierwszego elementu tej wartości array, trzeba key, X w tym przypadku: $value['x'] =123.

+0

Właśnie wykonałeś tę żarówkę w mojej głowie, dzięki :) – handmdmr

+0

proszę oznaczyć tę odpowiedź jako rozwiązaną, dzięki :) –

+0

Podobało mi się to wyjaśnienie, ale co, jeśli zamiast chcieć wartości chcę znać klucz? – Nmaster88

5

Różnica polega na tym, że na

foreach($featured as $key => $value){ 
echo $value['name']; 
} 

jesteś w stanie manipulować wartość każdej iteracji na $key z ich parę klucz-wartość. Jak @djiango odpowiedział, jeśli nie manipuluje każda wartość na $key wynik pętli będzie dokładnie taki sam, jak

foreach($featured as $value) { 
    echo $value['name'] 
} 

Źródło: Można go odczytać z PHP Documentation:

Pierwsza pętla formularza nad tablicą podaną przez wyrażenie array_example. W każdej iteracji wartość> bieżącego elementu jest przypisywana do wartości $, a wewnętrzny wskaźnik tablicy jest przesuwany o> jeden (tak, aby w następnej iteracji szukać następnego elementu). *

The Drugi formularz dodatkowo przypisze klucz bieżącego elementu do zmiennej $ key w> każdej iteracji.


Jeżeli dane które manipulują jest, powiedzmy, tablice z niestandardowych klawiszy, można wydrukować je na ekran tak:

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){ 
echo $key . "->" . $value; 
} 

powinien wydrukować:

name->Paul

age->23

Nie można tego zrobić z taką samą łatwością za pomocą foreach($featured as $value). Rozważmy powyższy format wygodny sposób manipulowania kluczami w razie potrzeby.

zdrowie

+0

Och, chłopcze, które miały dużo więcej sensu niż jakakolwiek odpowiedź, teraz mam cały pomysł: D dobrze przynajmniej rodzaj: D Żyj długo i dobrze, przyjacielu –

8

Ważnym miejscem, w którym jest WYMAGANY użyć key => value pary w foreach pętli należy wspomnieć. Załóżmy, że chcesz dodać nowy element nowy/sub do istniejącego elementu (w innym kluczu) w tablicy $features. należy wykonać następujące czynności:

foreach($features as $key => $feature) { 
    $features[$key]['new_key'] = 'new value'; 
} 


Zamiast tego:

foreach($features as $feature) { 
    $feature['new_key'] = 'new value'; 
} 

duży Różnica polega na tym, że w pierwszym przypadku uzyskiwania dostępu podrzędną wartość tablicy za pośrednictwem głównym tablica z kluczem do elementu, który jest aktualnie wskazywany przez wskaźnik tablicy.

Podczas gdy w drugim (który nie działa w tym celu) Jesteś nadającego sub-wartość w tablicy do tymczasowej zmiennej $feature która jest ustawiona po każdej iteracji pętli.

Powiązane problemy