Jak działa pętla foreach?

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Jak działa pętla foreach?

Post przez Malutki »

Jeszcze raz mam problem związany z PHP robię listę rozwijaną złożoną z tablicy (przykład przerobiłem z książki ale nie bardzo rozumiem 2 kwestie
Pierwszy problem to o co chodzi z tą częścią kodu :
foreach($Numery as $key =>$value ) o co chodzi z tym $key =>$value

a drugi to taki dlaczego pokazuje mi zawsze ostatni element tablicy a nie ten wybrany.

Bardzo proszę o podpowiedź ,gdyż te rozwiązanie z tablicą mi się bardzo podoba.
kawałek kodu :

$Numery=array(1=>'Jeden','Dwa','Trzy','Cztery','Pięć','Sześć','Siedem','Osiem','Dziewięć','Dziesięć','Jedenaście','Dwanaście');

echo '1. Wybierz numer kolejny ';

echo '<select name="Numery" method=POST>';
foreach($Numery as $key =>$value )
{
echo "<option value=\"$Numery\"> $value </option>\n";
}
echo "</select>" ;

echo"<b>Numer kolejny gazety to :</b>".$value; ---------------tu mi zawsze daje 12 cokolwiek bym nie wybrał
P.S
A gdybym chciał zrobić z tego tablicę 2 wymiarową która by była zrobiona w ten sposób że 1 element pokazywał by numer (cyfrę 1,2,3....)a drugi pokazywał by słownie (pierwszy ,drugi ,trzeci....) to jak się wtedy do tego zabrać :)


Mam nadzieje że to co tu wypisałem będzie w jakiś sposób zrozumiałe .Jeszcze raz wielkie dzięki za podpowiedzi

Zmieniam tytuł, aby bardziej odpowiadał treści. - Morfidon
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Formularz zrobiony z tablicy

Post przez Morfidon »

Witam,

Dziękuje za zapytanie.
Malutki napisał(a):foreach($Numery as $key =>$value ) o co chodzi z tym $key =>$value"
Najpierw warto by było zastanowić się czym jest klucz ?

Klucz z ang. key jako rzecz w naszym świecie realnym ;) jest to narzędzie, którym można otworzyć drzwi, ale trzeba się przyjrzeć temu kluczowi od innej strony.

Klucz do drzwi jest tylko JEDEN, co najwyżej można go zduplikować (powielić), ale tylko jeden jedyny klucz będzie pasował do danych drzwi, z tego wnioskujemy, że jest on unikalny.

Za drzwiami, jest pewnego rodzaju ZAWARTOŚĆ, tą wartością jest z ang. value.

Teraz przyjrzyjmy się temu od punktu programistycznego.

W PHP istnieją tzw. tablice asoscjacyjne, z ang. association oznacza skojarzenie, pewnego rodzaju przyporządkowanie.

Przyporządkowanie polega na uporządkowaniu elementów, a następnie ustawienie ich odpowiednio przy sobie, aby zaczęły stanowić "więź". Elementem może być jakikolwiek obiekt, czyli imię, słoń, mucha, liczba, nazwa - cokolwiek, w naszym wypadku są to najczęściej liczby oraz nazwy (stringi).

Więź ta jest specyficzna, zachowuje się tak jak w matematycznych funkcjach i dokładnie tak samo jak w przypadku klucz (unikalna nazwa / id) -> drzwi (wartość). Funkcja jest to takie przyporządkowanie, które każdemu elementowi ze zbioru X, przyporządkowuje dokładnie jeden element ze zbioru Y.

Zbiór jest to pewnego rodzaju nieuporządkowany (nie liczy się w nim kolejność) pojemnik do przechowywania elementów / obiektów.

Naszymi X w tym wypadku są klucze, natomiast Y są drzwi (wartości).

W matematyce taką funkcję opisuje się: X => Y, co jak widać jest podobne do $key => $value.

Czyli jeśli mamy powiedzmy następujące tablice:

Code: Zaznacz cały

$tab['cosik'] = 40;
$tab['kolor'] = "zielony";
$tab[3] = "Ala coś tam robi, ale nie pamiętam co";
$tab['ownnn'] = "jeeeee";
To do zbioru kluczy / zbioru X, należą elementy: "cosik", "kolor", 3, "ownnn".
Natomiast do zbioru Y / wartości, należą elementy: 40, "zielony", "Ala coś tam robi, ale nie pamiętam co", "jeeeee".

Natomiast nazwą funkcji / tablicy jest "tab".

W matematyce dla przykładu tab('cosik') = 40; tab ('kolor') = "zielony".

W informatyce dla przykładu tab['cosik'] == 40; tab['kolor'] == 'zielony'; - zwrócą wartość "true".

Teraz dochodzimy do pętli "foreach($Numery as $key =>$value )"

$Numery to funkcja / nazwa tablicy. $key to klucze. $value to wartości.

foreach - każdy element
$Numery - z tablicy Numery
as - "potraktuj" jako
$key - klucz
=> przyporządkuj go do
$value - wartości.

Ponieważ jest to pętla i wykona się ona dla każdego (foreach) elementu tablicy raz, to pod kluczem oraz wartością przy każdym "przejściu" przez pętle, będą znajdowały się inne wartości.

Dla np.

Code: Zaznacz cały

$tab['cosik'] = 40;
$tab['kolor'] = "zielony";
$tab[3] = "Ala coś tam robi, ale nie pamiętam co";
$tab['ownnn'] = "jeeeee";
wywołanie

Code: Zaznacz cały

foreach ($tab as $key => $value)
{
   echo $key." = ".$value."<br />";
}
da nam jako wynik:

Code: Zaznacz cały

cosik = 40;
kolor = "zielony";
3= "Ala coś tam robi, ale nie pamiętam co";
ownnn = "jeeeee";
na końcu w $value będzie znajdować się "jeeeee".

Teraz wystarczy odnieść się do tego co napisałem do Pana przypadku - myślę, że teraz to będzie proste i przyda się jako trening :)

Na marginesie pętla mogłaby wyglądać tak:

Code: Zaznacz cały

foreach ($tab as $abc => $abcd)
{
   echo $abc ." = ".$abcd."<br />";
}
Wygląda inaczej, aby zmienne były self-descriptive (samo-opisujące się).

Pozdrawiam serdecznie,

Arkadiusz Włodarczyk
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Jak działa pętla foreach?

Post przez Malutki »

Dziękuje za odpowiedź lecz mam jeszcze jeden problem ,jak pobrać przez POST właściwy czyli wybrany przez użytkownika numer :
echo"<b>Numer kolejny gazety to :</b>".$value; ---------------tu mi zawsze daje 12 cokolwiek bym nie wybrał lub jeśli będę pobierał po $key to odpowie mi że "Dwanaście" jeszcze testowałem po echo '<select name="N" method=POST>';
i nic mi nie wychodzi proszę o jeszcze jakąś podpowiedź bo chciałbym to w jakiś sposób rozwiazać .
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak działa pętla foreach?

Post przez Morfidon »

Napisałem:
"na końcu w $value będzie znajdować się "jeeeee"."
w Pana wypadku będzie to ostatnia wartość tablicy, czyli w tym wypadku dwanaście.

Sprawdza Pan:

Code: Zaznacz cały

if(isset($_POST['nazwa_select_boxa'])) 
   echo $_POST['nazwa_select_boxa'];
Pozdrawiam,

Arkadiusz
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Jak działa pętla foreach?

Post przez Malutki »

Panie Arkadiuszu już mi sił braknie :) nie wiem co robię źle jeszcze raz proszę o pomoc wklejam cały kod odnośnie tego pobierania wybranego numeru z listy .Jeszcze raz bardzo proszę o podpowiedź.

Code: Zaznacz cały

<html>

<head>
  <title></title>
</head>

<body>

<?php
  $Numery=array(1=>'Jeden','Dwa','Trzy','Cztery','Pięć','Sze¶ć','Siedem','Osiem','Dziewięć','Dziesięć','Jedena¶cie','Dwana¶cie');
  echo '1. Wybierz numer kolejny gazetki: ';
  echo '<select name="nr" method=POST>';
  foreach($Numery as $key =>$value ){
  echo "<option value=\"$Numery\"> $key </option>\n";
 }
  echo "</select>" ;
  echo'<br>';
  echo '<input type="submit" value="Dodaj">';
  if(isset($_POST['submit'])){
  echo"<b>Numer kolejny gazety to :</b>".$_POST['nr'];  [b] //tu nie wiem co mam pobrać[/b]
  }
?>

</body>

</html>
P.S
Jak coś to proszę o kare dla mnie za zamotanie :oops:
Pozdrawiam Piotr .
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak działa pętla foreach?

Post przez Morfidon »

Witam,

Nie zrobił Pan w ogóle formularza, więc jak ma cokolwiek przesłać?

Gdzie jest

Code: Zaznacz cały

<form> </form>
z atrybutami action, method?

Code: Zaznacz cały

  $Numery=array(1=>'Jeden','Dwa','Trzy','Cztery','Pięć','Sze¶ć','Siedem','Osiem','Dziewięć','Dziesięć','Jedena¶cie','Dwana¶cie');
  echo '<form method=\'post\' action=\'odbierz_dane.php\' />';
  echo '1. Wybierz numer kolejny gazetki: ';
  echo '<select name="nr">';
  foreach($Numery as $key =>$value ){
  echo "<option value=\"$value\"> $key </option>\n";
}
  echo "</select>" ;
  echo'<br>';
  echo '<input type="submit" value="Dodaj">';
  echo '</form>';
  if(isset($_POST['nr'])){
  echo"<b>Wybrany numer gazety to :</b>".$_POST['nr'];  
  }

Pozdrawiam,

Arkadiusz Włodarczyk
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Jak działa pętla foreach?

Post przez Malutki »

Wielkie dzięki wymierzam sobie kare :oops: za zamotanie
Post Reply