No cóż, kolejna sobota, to kolejny wpis o PHP! ;)
Zacznijmy od krótkiej poprawki dotyczącej poprzedniego tekstu - mikro tabelka
AND | && |
OR | || |
NOT | ! |
Czyli zapis znakowy ;)
Tablice
Można powiedzieć o tablicach, że to zmienna z szufladkami. Po prostu pod jedną nazwą i odpowiednim numerem (indeksem) [można używać też liter] można przechować jakieś dane.
Ktoś może zastanowić się - po co? Bo powiedzmy, że mamy życie gracza to możemy zapisać jako zmienną $zyciegracza i tyle.
Problem pojawia się gdy na przykład wczytujemy plik. Takie coś zapisywane jest do tablicy, gdzie jeden element przechowuje jedną linijkę.
Ale może to nie być intuicyjne. Co można przechowywać (oprócz wszystkiego). Na przykład nie tyle życie gracza to jakieś statystyki:
$statystyki["hp"]=100;
$statystyki["mana"]=150;
I odwoływać się po nazwie - czyli po prostu jako zbiór. Zbiór kart w talii, zbiór kart w ręce, statystyki, dane ze stron internetowych i tak dalej. To wszystko ostatecznie przechowuje się w tablicach.
Najczęściej w tablicach indeksy mają wartość liczbową - liczoną od 0.
<?php
$liczba[0] = 5;
$liczba[1] = 3;
echo $liczba[0]+$liczba[1];
Print_r
Kiedyś mówiliśmy o echo jako sposobie wyświetlania danych. Funkcja ta wyświetla w zasadzie stringi, integery i tak dalej. Nie nadaje się do wyświetlania tablic. Print_ zresztą też nie do końca nie, to po prostu wizualizacja jak wygląda coś co jest w danym elemencie (np. tablicy).
Weźmy przykład:
<?php
$tekst[0] = "Ala ma kota";
$tekst[1] = "Kot ma Alę";
$tekst[2] = "Idzie Grześ przez wieś";
echo $tekst;
Mamy tablicę z 3 elementami. Jeśli zrobimy echo $tekst bez podania elementu dostaniemy ostrzeżenie i informacje, że to jest tablica (od echo). Ale print_r pozwoli nam na jej ładne wizualne przedstawienie. Nie przyda się to do strony, ale do pokazania nam co znajduje się w środku (czyli coś w rodzaju debuggowania).
<?php
$tekst[0] = "Ala ma kota";
$tekst[1] = "Kot ma Alę";
$tekst[2] = "Idzie Grześ przez wieś";
print_r($tekst);
A wynik wygląda tak:
Array
(
[0] => Ala ma kota
[1] => Kot ma Alę
[2] => Idzie Grześ przez wieś
)
Czyli wyświetlił, że to tablica i ma element 0 o wartości "Ala ma kota" ... i tak dalej.
Eksplozja i implozja
Dzisiaj raczej nie zaczniemy pętli, ale omówimy parę przydatnych funkcji co do tablic:
Explode i Implode to dwie funkcje o odwrotnych opcjach.
Implode łączy elementy tablic w jeden string
Explode rozsadza string na elementy tablicy
Oczywiście musimy wiedzieć jak chcemy łączyć.
$implozja = implode(",", $tekst);
Czyli w skrócie - funkcja implode połączy nam przecinkiem wszystkie wartości $tekst i zapisze jako string do zmiennej implozja.
<?php
$tekst[0] = "Ala ma kota";
$tekst[1] = "Kot ma Alę";
$tekst[2] = "Idzie Grześ przez wieś";
$implozja = implode(",", $tekst);
echo $implozja;
Wynik: Ala ma kota,Kot ma Alę,Idzie Grześ przez wieś
Eksplozja rozbija string na tablicę. Ale zamiast dzielić tekst po przecinku, podzielmy po spacjach. Powinniśmy uzyskać wyrazy w danym stringu (u nas nie do końca, bo jak jest przecinek to nie ma spacji, ale jako demo).
<?php
$tekst[0] = "Ala ma kota";
$tekst[1] = "Kot ma Alę";
$tekst[2] = "Idzie Grześ przez wieś";
$implozja = implode(",", $tekst);
$eksplozja = explode(" ", $implozja);
print_r($eksplozja);
A wynik wygląda tak:
Array
(
[0] => Ala
[1] => ma
[2] => kota,Kot
[3] => ma
[4] => Alę,Idzie
[5] => Grześ
[6] => przez
[7] => wieś
)
Ale po co to robić? Powiedzmy, że szukamy słowa Grześ. Są do tego specjalne funkcje, ale my nie musimy chcieć ich używać. Dzięki pętli możemy sprawdzić czy np. gdzieś nie występuje za pomocą if.
Liczenie elementów
Jak niektórzy sprawdzili wartości są od 0 do 7. Daje nam to 8 elementów. Ale możemy to sprawdzić funkcją:
echo count($eksplozja);
Która zwróci nam ile jest elementów - Wynik to 8. Ale po co nam to wiedzieć?
Powiedzmy, że ktoś doda parę zdań, a my chcemy sprawdzić czy Grześ się powtarza gdzieś ;) Ilość wyrazów jest różna, przecież ktoś może dodać ich więcej. Wiedząc ile jest wyrazów możemy poprosić funkcję o zrobienie czegoś.
Przyda nam się to w następnym tekście, gdzie będę pokazywał coś na pętlach ;)
Dzisiaj zadania domowego nie ma.
Rozwiązanie poprzedniego:
<?php
$a = 98;
if(($a%2!=0) && ($a > 0 && $a < 100)) {
echo 'Ok';
}
Jeśli ktoś czuje się zakłopotany, spokojnie - praktyka czyni mistrza, a będziesz tego często używał
brakuje mi tylko wzmianki o tablicach asocjacyjnych które moim zdaniem są bardzo przydatne oraz automatycznej inkrementacji tablicy bez podawania indeksów :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Tablice w PHP to tak naprawdę bardzo rozbudowane obiekty. Nie tylko przechowują wartości, ale także linki, hashe i wiele innych rzeczy. Dlatego zajmują nawet do 100x więcej miejsca w pamięci w porównaniu do innych języków programowania - są bardzo mało wydajne.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Aż tak dobry to nie jestem chyba :D W sensie asocjacyjne ok, ale automatyczna inkrementacja to nie :D Zwykle DB to robi, więc ja nie potrzebuję, ale hmm.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Witaj, jestem botem patrolującym #pl-artykuly.
Twój post nie spełnia podstawowej reguły #pl-artykuly dotyczącej długości wpisu.
Wyedytuj go dopisując więcej treści lub usuń tag - dziękujemy!
Więcej o regulaminie możesz przeczytać w podanym linku.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Aghrrr xd Diosbot, mój śmiertelny wróg
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit