Dzisiaj27 listopada, 2020

Tablice

Budowę tablicy w PHP 7 prezentuje poniższy diagram:

Teraz zgłębimy się bardziej w to czym są tablice. Tablice w programowaniu służą do przechowywania więcej niż jednej wartości. Przyjrzyjmy się teraz naszemu wcześniej stworzonemu plikowi index.php:

<?php

$powitanie = "Witaj, Świecie!";

include "index.view.php"; 

Co jeśli chcielibyśmy powitać kilka ustalonych wcześniej osób na stronie? Do tego służą wspomniane wcześniej tablice, co prawda w gdy liczba osób, które chcemy powitać byłaby mała moglibyśmy użyć zmiennych, jednak nie ma to sensu, bo byłaby to zła praktyka programistyczna. Dodajmy więc do naszego kodu tablicę zawierającą 3 osoby. Kod będzie wyglądał tak:

<?php

$powitanie = [
   'Artur',
   'Dawid',
   'Ilona'
];

include "index.view.php";

Jak widzisz konstrukcja tablicy jest prosta, wartości które się w niej zawierają wpisujemy pomiędzy nawiasy kwadratowe – oznacza to, że działamy na tablicy i oczywiście wewnątrz rozdzielamy je przecinkiem. Możemy zapisać to także używając array(wartość1, wartość2, itd.). Przykład:

<?php

$powitanie = array(
    'Artur',
    'Dawid',
    'Ilona'
);

include "index.view.php";

Udało nam się stworzyć tablicę, a teraz jak ją wyświetlić jej zawartość? Użyjemy do tego poznanej wcześniej konstrukcji foreach, ale w pliku index.view.php, który używamy do wyświetlania naszej strony:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>HTML</title>
    <style>
        header {
            text-align: center;
            padding: 2em;
            background: silver;
        }
    </style>
</head>
<body>
<header>
    <h1>
    Witaj,
    <?php foreach($powitanie as $name): ?>
    <?= $value ?>
    <?php endforeach; ?>
    !
    </h1>
</header>
</body>
</html>

Wyświetli nam się:

A co jeśli chcielibyśmy przypisać np. wiek do danej osoby? Możemy to zrobić również używając tablic. Jednak nie będzie to zwykła tablica, a tzw. tablica asocjacyjna. Nasz zmieniony kod oparty o tablice asocjacyjną będzie prezentował się tak:

<?php

$powitanie = [
    'Artur' => 20,
    'Dawid' => 20,
    'Ilona' => 18
];

include "index.view.php";

Jednak zamiast imion wyświetlą się liczby. Musimy zmodyfikować naszą pętlę foreach:

<?php foreach($powitanie as $name => $age): ?>
    <?= $name . "(" . $age . ")" ?>
<?php endforeach; ?>

Teraz zobaczymy poprawny rezultat:

Z czego składa się tablica

Omówiliśmy wcześniej działanie tablicy, a teraz zagłębimy się w jej budowę. W PHP tablica to tak naprawdę uporządkowana konstrukcja (ordered map) przechowująca dane parami. A konkretnie pierwszy element z pary to klucz a druga to wartość. Chcąc poznać wartość elementu tablicy musimy odnieść do jej klucza. Oznacza, to że tablica:

<?php

$powitanie = [
    'Artur'
    'Dawid'
    'Ilona'
];

Możemy wyświetlić za pomocą pętli for:

$powitanie = [
    'Artur',
    'Dawid',
    'Ilona'
];

for($i = 0, $c = count($powitanie); $i<$c; $i++) {
    echo $powitanie[$i];
}

gdyż PHP domyślnie uporządkowanie (zaczynając od 0) przypisuje klucze w przypadku, gdy nasza tablica nie jest asocjacyjna – w gruncie rzeczy jesteśmy zmuszani do używania tego typu. Poniżej budowa tablicy, jako dowód:

A tu kod to, którym możesz sam sobie to sprawdzić:

$powitanie = [
    'Artur',
    'Dawid',
    'Ilona'
];

echo "<pre>";
var_dump($powitanie);
echo "</pre>";

Czy zawartość tablicy której kluczem są elementy typu string, możemy wyświetlić w pętli for?

Dowiedzieliśmy się, że chcąc wyświetlić zawartość tablicy odnosimy się przez jej klucz, jednak tutaj podobnie jak w przypadku pętli foreach chcemy wyświetlić klucz i wartość. Możemy to zrobić stosując poniższą konstrukcję:

<?php

$powitanie = [
    'Artur' => 20,
    'Dawid' => 20,
    'Ilona' => 18
]; 

for($keys = array_keys($powitanie), $i = 0, $c = count($keys); $i < $c; $i++) {
    echo $keys[$i] . " " . $powitanie[$keys[$i]] . "<br>";
}

Funkcja array_keys zwraca klucze z danej tablicy, więc w naszym przykładzie zwróci nam ona imiona. Pętla ma wykonać się tyle razy, ile jest w niej kluczy, których ilość liczymy używając funkcji count. Na pierwszy rzut oka fragment tego kodu, a konkretnie:

$powitanie[$keys[$i]]

Może wydawać się niezrozumiałe. Jak to działa? Otóż, żeby jak już wcześniej wspominałem, żeby wyświetlić zawartość elementu w tablicy $powitanie musimy znać jego klucz. W naszym przypadku klucze nie są uporządkowane – ponieważ zostały oparte na elementach typu string. Dlatego też musimy się odwołać do tych kluczy używając $keys[$i]. Tablice $keys stworzyliśmy wcześniej, w pierwszym wyrażeniu pętli for. Zawiera ona imiona jako wartości uporządkowanych kluczy (tutaj od 0 do 2). Więc odnosząc się do $keys[$i] odnosimy się do wartości jej klucza.

Dodawanie danych do tablicy

Dodawanie danych do tablicy wygląda następująco:

<?php

$array = [];

$array[] = "Adam"; // dodaje wartość "Adam" do następnego wolnego klucza

$array['Ilona'] = 18; // dodaje wartość 18 do klucza "Ilona"
Udostępnij artykuł
guest
0 komentarzy
Inline Feedbacks
View all comments