• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP tabele a licznik pętli

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
76 wizyt
pytanie zadane 28 września 2020 w PHP przez vingilot85 Obywatel (1,150 p.)

Witam,

mam taki kod:

<?php
$klient=[];
$klienci=[];

$klient['imie']="Piotr";
$klient['nazwisko']='Najsztub';
$klient['auto']='Chewrolet';
$klient['winien']=0;

array_push($klienci, $klient);

$klient['imie']='Tomasz';
$klient['nazwisko']='Hajto';
$klient['auto']='Chrystler';
$klient['winien']=0;

array_push($klienci,$klient);

$klient['imie']='Robert';
$klient['nazwisko']='Frog';
$klient['auto']='BMW';
$klient['winien']=25;

array_push($klienci, $klient);

print_r($klienci);

echo "Najniebezpieczniejszym klientem jest: ".$klienci[1]['nazwisko'].PHP_EOL;
echo PHP_EOL;

$e=count($klienci);

for($i=0; $i<$e; $i++)
{
    printf("%s\t%s\t%s \n",
        $klienci[$i]['imie'],
        $klienci[$i]['nazwisko'],
        $klienci[$i]['winien']
        );
}
?>

W linii 35, w pętli for wydrukowanie pożądanej treści działa tylko przy zastosowaniu $i<$e.

I tu pytanie - dlaczego program sypie się, podczas zastosowania warunku $i<=$e? Wg mojej logiki powinno to działać właśnie dopiero wtedy - kiedy jest warunek spełniony DO ilości spełnionej w $e, a nie mniejszej.

2 odpowiedzi

+1 głos
odpowiedź 28 września 2020 przez Bosswell Nałogowiec (36,510 p.)
Tablica składa się z 3 elementów. Dlatego $e = 3. W PHP iterujemy od 0. W momencie kiedy masz warunek <= 3, to wtedy odwołujesz się do offsetu 3, który nie istnieje.
komentarz 28 września 2020 przez vingilot85 Obywatel (1,150 p.)
No niby tak. Ale chodzi o to, że daję <= licznik w zdefiniowany w $e. A $e samo oblicza ile jest zajść. Stąd moje pytanie, dlaczego musi być MNIEJSZE a nie MNIEJSZE LUB RÓWNE
komentarz 28 września 2020 przez vingilot85 Obywatel (1,150 p.)
Chyba, że chodzi o to, że count liczy od 1, nie od 0
komentarz 28 września 2020 przez vingilot85 Obywatel (1,150 p.)
Ok, już rozumiem. Dzięki za pomoc:)
+1 głos
odpowiedź 28 września 2020 przez VBService Ekspert (218,830 p.)
edycja 28 września 2020 przez VBService

$e=count($klienci); w przypadku tej tablicy zwróci wartość 3, bo są trzy wpisy (elementy), ale iteracja w przypadku tablic w php-ie odbywa się od 0 (zera)

$i => 0 - count => 1
$i => 1 - count => 2
$i => 2 - count => 3

przy $i<=$e, pętla "wychodzi" poza zakres tej tablicy

$i => 3 - co by odpowiadało już count => 4

można i tak, ale nie powinno się tego stosować

$e=count($klienci) - 1;
 
for($i=0; $i<=$e; $i++)
{
    printf("%s\t%s\t%s \n",
        $klienci[$i]['imie'],
        $klienci[$i]['nazwisko'],
        $klienci[$i]['winien']
        );
}

Można bez count

echo "<pre>";
echo "Najniebezpieczniejszym klientem jest: ".$klienci[1]['nazwisko'].PHP_EOL;
echo PHP_EOL;
 
foreach($klienci as $klient)
{
    printf("%s\t%s\t%s \n",
        $klient['imie'],
        $klient['nazwisko'],
        $klient['winien']
        );
}

echo "</pre>";
?>

 

1
komentarz 28 września 2020 przez vingilot85 Obywatel (1,150 p.)
Teraz rozumiem, dzięki!

Podobne pytania

0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 31 sierpnia 2017 w PHP przez zenon209210 Początkujący (260 p.)
0 głosów
2 odpowiedzi 162 wizyt
pytanie zadane 3 maja 2016 w C i C++ przez RycerzAndromedy Użytkownik (670 p.)
0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 12 lutego 2018 w HTML i CSS przez Kijoszi Początkujący (330 p.)

90,401 zapytań

139,013 odpowiedzi

311,503 komentarzy

60,082 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...