Tablice

Poznaliśmy już tablice, a teraz zaznajomimy się z niektórymi ich możliwościami. Na początku tworzenie tablic:
<?php

// Tworzenie tablicy przez przypisanie
$tab[] = 'anna';
$tab[] = 'kasia';
$tab[] = 'coś';
$tab[] = 4;

// Tworzenie tablicy przez przypisanie z podaniem indeksów
$tab2[1] = 'anna';
$tab2[2] = 'kasia';
$tab2[3] = 'coś';
$tab2[12] = 4;

// Tworzenie tablicy za pomocą funkcji array
$tab3 = array('raz', 'dwa', 3);
A teraz objaśnienia. "Zmienna" z kwadratowymi nawiasami na końcu - $zmienna[] oznacza w PHP tablicę. W nawiasie tym może być podany index dla danej wartości (numer) W pierwszym przypadku go nie podaliśmy i PHP będzie automatycznie numerować poczynając od zera. W drugim przypadku podaliśmy indeksy. W trzecim przypadku skorzystaliśmy z funkcji array, wprowadzając do niej kolejne wartości tablicy. Wykonanie pliku php z tym kodem nic nie wyświetli... Stwórz plik php o kodzie:
<?php

// rekurencyjne drukowanie tablicy, stosowane głownie do sprawdzania tablic itp.
echo '<pre>';
print_r($tab);
print_r($tab3);
echo '</pre><br />';

// sposób 2 - foreach
foreach ($tab2 as $element)
{
echo $element.', ';
}

// nie trzeba drukować całej tablicy by mieć jeden z jej elementów
echo '<br /><br />';
echo 'Pierwszy element tablicy tab to:'. $tab[0];
Funkcja print_r stosowana jest do wyświetlania tablicy wraz z jej strukturą, jest to pomocne przy pisaniu skryptów i sprawdzaniu poprawności otrzymanych tablic. print_r($tab) zwróci strukturę pierwszej tablicy: ( [0] => anna [1] => kasia [2] => co? [3] => 4 ). Standardowym sposobem wyświetlania tablic jest pętla foreach. Foreach została specjalnie stworzona dla tablic i ta pętla ma być używana do ich przeglądania, nie nie stosujemy "for". Przy tworzeniu foreach wpisujemy w nawiasie nazwę tablicy ($tab, $tab2, $tab3 u nas) a następnie "as $zmienna" gdzie nazwa zmiennej jest dowolna. W przypadku rozbudowanych tablic, czy nawet dla prostych przyjęto od razu stosować rozszerzoną instrukcję:
<?php

foreach ($tab3 as $klucz => $wartosc)
{
echo $wartosc.', ';
}
wartość $klucz przyda nam się w tablicach rekurencyjnych o których później. Przy tej instrukcji mamy "as $klucz => $wartosc" gdzie $wartosc jak i $klucz mogą mieć dowolną nazwę.
Tablice asocjacyjne różnią się tym od zwykłych tablic tym że indeks nie jest liczbą lecz łańcuchem. Tablicę asocjacyjną tworzymy i czytamy tak:
<?php

// tworzymy tablicę asocjacyjną
$tablica = array("imie" => "Andrzej", "nazwisko" => "Lepper", "opalenizna" => "silna");

// Wyświetlamy
foreach ($tablica as $klucz => $dana)
{
echo 'Klucz to <b>'.$klucz.'</b> a jego wartość to <b>'.$dana.'</b>';
}

// wcześniejsze metody też działają
echo '<br /><br /><pre>';
print_r($tablica);
echo '</pre><br />';
echo $tablica['opalenizna'];
Tablicę tworzymy za pomocą funkcji array, przypisując danemu łańcuchowi jakąś wartość - "łańcuch" => "wartość". Takie pary oddzielamy przecinkiem. Do wyświetlania tablicy asocjacyjnej służy właśnie opisana wcześniej "rozbudowana" instrukcja "as $klucz => $wartosc".

Na tablicach można też operować innymi funkcjami:
  • array_flip($tablica) - zmienia miejscami klucze i wartości
  • array_pop($tablica) - zwraca i usuwa ostatni element tablicy
  • array_push($tablica, $wartosc) - dołącza nową wartość do tablicy
  • array_reverse($tablica) - odwraca tablicę
  • array_shift($tablica) - zwraca pierwszy element z tablicy i usuwa go
  • array_sum($tablica) - zwraca sumę elementów tablicy
  • array_unique($tablica) - usuwa duplikaty z tablicy
  • array_values($tablica) - zwraca wartości tablicy
  • asort($tablica) - sortuje tablicę rosnąco
  • sort($tablica) - sortuje tablicę malejąco
  • rsort($tablica) - sortuje tablicę asocjacyjną malejąco
  • arsort($tablica) - sortuje tablicę asocjacyjną rosnąco
  • count($tablica) - zwraca ilość elementów tablicy
  • arrat_merge($tablica1, $tablica2) - łączy tablice
  • in_array($wartość, $tablica) - zwraca wartość prawda gdy podana wartość jest w tablicy
A oto przykładowy kod z zastosowanymi powyższymi funkcjami:
<?php

$tab[] = 'anna';
$tab[] = 'kasia';
$tab[] = 'jurek';
$tab[] = 'jurek';
$tab[] = 'beata';

echo '<h1>Tablica początkowa</h1>';
foreach ($tab as $value)
{
echo $value.', ';
}

echo '<br /><br />Asort wykonane na tablicy';
asort($tab);
foreach ($tab as $value)
{
echo $value.', ';
}

echo '<br /><br />Array_unique wykonane na tablicy';
$tab = array_unique($tab);
foreach ($tab as $value)
{
echo $value.', ';
}

echo '<br /><br />in_array';
IF (in_array('Zbyszek', $tab))
{
echo 'Zbyszek jest w tablicy';
}
else
{
echo 'Zbyszka nie ma w tablicy';
}

Wykonywanie funkcji na elementach tablicy

Do tego celu służy array_map a działa w ten sposób:
<?php

$tab = array('ola', 'kasia', 'jurek');

function glupiafunkcja($tekst)
	{
	$tekst = strtoupper($tekst);
	$tekst = strrev($tekst);
	return $tekst;
	}
$tab = array_map("glupiafunkcja", $tab);
//array_map("NAZWA FUNKCJI", $tablica)
print_r($tab);
echo '<br />';

$tab2 = array('ola', 'kasia', 'jurek');
$tab2 = array_map("strtoupper", $tab2);
print_r($tab2);
Można używać własnych lub istniejących funkcji. W pierwszym przypadku użyliśmy własnej funkcji zmieniającej małe litery na duże i odwracającą kolejność wyrazów.

Badanie różnic pomiędzy tablicami

<?php

$tab = array('ola', 'kasia', 'jurek');
$tab2 = array('ola', 'kasia', 'boczek');

$tablica = array_diff($tab, $tab2);
print_r($tablica);
array_diff zwraca tablicę złożoną z elementów pierwszej tablicy, które nie wystąpiły w tablicy drugiej. W tym przykładzie otrzymamy Array ( [2] => jurek ).

Zliczanie powtórzeń wartości w tablicy

<?php
$ar  = array('pies', 'pies', 'pies', 'pies', 'kot', 'pies', 'pies', 'pies', 'pies', 'pies', 'kot', 'ryba');
echo '<pre>';
print_r(array_count_values($ar));
?>
Funkcja array_count_values zwraca tablicę asocjacyjną, w której klucze to wartości z przekazanej tablicy (bez powtórzeń) a wartości to ilość wystąpień danej wartości w tablicy. Dla powyższego przykładu otrzymamy wynik:
Array
(
    [pies] => 9
    [kot] => 2
    [ryba] => 1
)

Explode i Implode

Funkcja explode służy do rozbijania łańcuchów na elementy (zwracane w postaci tablicy) za pomocą "znaku" podziału:
<?php

$tekst  = 'andrzej, adam, boczek, zbigniew, jajco'; 
$podzial = explode(', ', $tekst); // explode(znak podziału, łańcuch)
echo '<pre>';
print_r($podzial);

Znakiem podziału w tym przypadku jest przecinek i spacja. Zwócona zostanie tablica zawierająca wszystkie kawałki podzielonego łańcucha.

Funkcja implode działa odwrotnie, łączy elementy tablicy w łańcuch używając podanego znaku łączenia:
<?php
$tekst  = 'andrzej, adam, boczek, zbigniew, jajco';
$podzial = explode(', ', $tekst);
echo implode(' - ', $podzial);
RkBlog

Podstawy PHP, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact