Strona 1 z 1

Jak działa pętla foreach?

Napisane: poniedziałek, 19 kwietnia 2010, 01:10
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

Re: Formularz zrobiony z tablicy

Napisane: poniedziałek, 19 kwietnia 2010, 11:54
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

Re: Jak działa pętla foreach?

Napisane: środa, 21 kwietnia 2010, 00:07
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ć .

Re: Jak działa pętla foreach?

Napisane: środa, 21 kwietnia 2010, 11:07
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

Re: Jak działa pętla foreach?

Napisane: środa, 21 kwietnia 2010, 19:33
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 .

Re: Jak działa pętla foreach?

Napisane: środa, 21 kwietnia 2010, 21:47
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

Re: Jak działa pętla foreach?

Napisane: środa, 21 kwietnia 2010, 22:07
przez Malutki
Wielkie dzięki wymierzam sobie kare :oops: za zamotanie