Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czy to nie to samo ? foreach - for ?
Forum PHP.pl > Forum > Przedszkole
uczeń php
Oto jeden kawałek kodu
  1. for($num_i = 0; $num_i < count($tabss); $num_i++) {
  2. for($indeksy = 0; $indeksy < count($tabss[$num_i]); $indeksy++) {
  3. echo $tabss[$num_i][$indeksy].'<br />'; }
  4. }

Oto drugi kawałek kodu
  1. foreach($tabss as $ser)
  2. foreach($ser as $str)
  3. echo $str;

i z punktu logicznego mogłoby się wydawać, że to jest jedno i to samo a jednak nie gdyż za pierwszym razem wyświetla mi dwie pierwsze wartości z tablicy pierwszej i pierwszą wartość z tablicy drugiej. Natomiast drugi kawałek kodu wyświetla mi wszystkie wartości w obu tablicach. Czy ktoś mógłby wytłumaczyć, dlaczego? A po za tym zależy mi na udoskonaleniu tego pierwszego zapisu, żeby i również w nim były wyświetlane wszystkie wartości z tablicy dwuwymiarowej.
flashdev
Może ten przykład Ci trochę rozjaśni:

  1. <?php
  2.  
  3. $tab = array(1, 2, 3, 'abc' => 4, 'def' => 5);
  4.  
  5. for( $i = 0; $i < count($tab); $i++ ){
  6. var_dump($tab[$i]);
  7. }
  8.  
  9. echo "\n";
  10.  
  11. foreach( $tab as $value){
  12. var_dump($value);
  13. }
  14.  
  15. fgets(STDIN);
CuteOne
Szybszy ;p
uczeń php
W nie których miejscach gdzie są powinne być wartości jest null - pierwszy kawałek kodu a drugim są normalne wartosci dlaczego ?
flashdev
Cytat(uczeń php @ 27.10.2010, 17:23:15 ) *
W nie których miejscach gdzie są powinne być wartości jest null - pierwszy kawałek kodu a drugim są normalne wartosci dlaczego ?


  1. <?php
  2.  
  3. $tab = array(1, 2, 3, 'abc' => 4, 'def' => 5);
  4.  
  5. var_dump($tab);
  6. echo "\n";
  7.  
  8. for( $i = 0; $i < count($tab); $i++ ){
  9. echo '$tab['. $i .'] = '. $tab[$i] ."\n";
  10. }
  11.  
  12. echo "\n";
  13.  
  14. foreach( $tab as $key => $value){
  15. echo '$tab['. $key .'] = '. $value ."\n"; // $tab[$key] == $value
  16. }
  17.  
  18. fgets(STDIN);


Może teraz lepiej widać o co chodzi.
uczeń php
Jak nastąpił zapis do tablicy to sam nie wiem -> napisałem coś takiego
  1. foreach($tabss as $ind_ser=>$ser)
  2. foreach($ser as $ind_str=>$str)
  3. // var_dump($str);
  4. echo '<br />'.$ind_ser.' '.$ind_str.'<br />';

a oto wyniki:
0 0

0 1

0 36

0 54

0 72

0 90

0 108

0 126

1 0

1 144

1 176

1 248 a dlaczego nie otrzymałem wyników
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
1 0
1 1
1 2
1 3
i wtedy mógłyb skorzystać z dwóch pętli for
1 2
nospor
Przecież FORem lecisz od 0 do liczby elementów w tablicy. Zeby to zadzialalo to indeksy muszą byc od 0 do liczby elementow o jeden wiekszy, a przeciez widac po FOREACH ze masz tam indeksu nienumerowane po kolei
uczeń php
TO JA WIEM TYLKO DLACZEGO OTRZYMALEM TAKIE WYNIKI , ŻE 0 1 A POTEM JEST 0 36 ZAMIAST 0 2.
nospor
jejkuś... bo masz takie INDEKSY!!

Zrob sobie
print_r($tabss);
a zobaczysz co tam naprawde siedzi
uczeń php
zrobiłem print_r($tabss); a oto wyniki:

Array ( [0] => Array ( [0] => www.google.pl [1] => www.google.com [36] => www.yahoo.com [54] => www.ask.com [72] => www.onet.pl [90] => www.interia.pl [108] => www.google.interia.pl [126] => www.wp.pl ) [1] => Array ( [0] => www.centrumcyfraplus.pl [144] => www.strona.pl [176] => www.arkamed.com.pl [248] => www.tooba.pl ) )
nospor
No jest tak jak mowilem. Masz takie indeksy wiec masz takie wyniki. Czego więc od nasz oczekujesz? Już ci przecież wyjasnilem w poprzednich postach czemu Twoj skrypt dziala jak dziala. Czego nadal nie rozumiesz?
uczeń php
Nie wiem czy to profesjonalne podejście ale w swoim projekcie muszę wywołać n razy funckję w postaci for($i) i for($j) { function funkcja($i, $j) } a petle foreach sumują te dwie literacje co nie za bardzo mi odpowiada. Dlatego tablicę dwuwymiarową wolałbym wywołać w postaci for i for.
CuteOne
  1. $i=$k=0;
  2. foreach($tabss as $ind_ser=>$ser) {
  3. foreach($ser as $ind_str=>$str) {
  4. echo '<br />'.$ind_ser.' '.$ind_str.'<br />'; // INDEX.' '.INDEX
  5. echo $i.' '.$k; // ILOSC_WIERSZY.' '.ILOSC_WIERSZY
  6. $i++;
  7. }
  8. $k++;
  9. }
uczeń php
Czy w jakiś sposób można ściśle kontrolować indeksy?
fragment kodu zapisujący wartości do tablicy

$tabss = array(array());
$tabss = pola_select($pokaz_historie, $name_select_0, $name_select_1, $name_przycisk_pokaz_daty);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.