Tablice
Z PHPEdia.pl
Spis treści |
Tablice
Tablica to zbiór zmiennych. Każda tablica może posiadać dowolną liczbę elementów. Każdy element tablicy może mieć tzw. klucz, po którym można się do niego odwołać. W przypadku braku deklaracji klucza, ten jest generowany automatycznie.
Tablice można dowolnie zagnieżdżać.
Inicjalizacja tablic
Do inicjalizacji tablicy służy funkcja array():
<?php $tablica = array ('pierwszy element', 'drugi element'); ?>
Wynikiem tej operacji będzie tablica :
Array
(
[0] => pierwszy element
[1] => drugi element
)
Jak widzimy indeksowanie tablicy rozpoczyna się od '0' jeśli chcemy to zmienić możemy zainicjować indeksowanie inną liczbę :
<?php $tablica = array (12=>'dwunasty element', 'trzynasty element'); ?>
Array
(
[12] => dwunasty element
[13] => trzynasty element
)
Za indeksy mogą nam posłużyć dowolne wartości :
<?php $tablica = array ('imie'=>'Jan','nazwisko'=>'Kowalski','wiek'=>32); ?>
Array
(
[imie] => Jan
[nazwisko] => Kowalski
[wiek] => 32
)
Tablice wielowymiarowe :
<?php $tablica = array ( 'osoba1'=> array('imie'=>'Jan','nazwisko'=>'Kowalski','wiek'=>32), 'osoba2'=> array('imie'=>'Kim','nazwisko'=>'Jakamoto','wiek'=>19) ); ?>
Array
(
[osoba1] => Array
(
[imie] => Jan
[nazwisko] => Kowalski
[wiek] => 32
)
[osoba2] => Array
(
[imie] => Kim
[nazwisko] => Jakamoto
[wiek] => 19
)
)
Przeglądanie tablic
Wyświetlanie tablicy
Zacznijmy od tego jak można wyświetlić tablicę :
<?php $tablica= array( 'osoba1'=> array('imie'=>'Maciej','aka'=>'Tematu','wiek'=>21), 'osoba2'=> array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52), 'osoba2'=> array('imie'=>'Chuck','aka'=>'Chuck Norris','wiek'=>60) ); ?>
Funkcja print_r()
<?php print_r($tablica); ?>
Array ( [osoba1] => Array ( [imie] => Maciej [aka] => Tematu [wiek] => 21 ) [osoba2] => Array ( [imie] => Krystyna [aka] => Krysia z gazowni [wiek] => 52 ) [osoba3] => Array ( [imie] => Chuck [aka] => Chuck Norris [wiek] => 60 ) )
Nie wygląda to zbyt efektownie możemy wiąc dodaj znaczniki html "<pre>" które nam ładnie ten kod poukładają
<?php echo "<pre>"; print_r($tablica); echo "</pre>"; ?>
Array
(
[osoba1] => Array
(
[imie] => Maciej
[aka] => Tematu
[wiek] => 21
)
[osoba2] => Array
(
[imie] => Krystyna
[aka] => Krysia z gazowni
[wiek] => 52
)
[osoba3] => Array
(
[imie] => Chuck
[aka] => Chuck Norris
[wiek] => 60
)
)
dostęp do tablicy
dostęp do tablicy mamy poprzez zmienną do której przypisana jest tablica, możemy odwołać się bezpośrednio do całej tablicy, jej części lub konkretnego pola.
Odwołajmy się więc do części tablicy :
<?php echo "<pre>"; print_r($tablica['osoba2']); echo "</pre>"; ?>
Array
(
[imie] => Krystyna
[aka] => Krysia z gazowni
[wiek] => 52
)
Lub do konkretnego pola:
<?php echo "pre>"; print_r($tablica['osoba2']['imie']); echo "</pre>"; ?>
Krystyna
Oczywiście wszystkie pola możemy szybciutko podmieniać
<?php $tablica['osoba2']['imie']="Ewa"; ?>
W tym momencie osoba2 (stara pani Krysia) zmienia Imię na Ewa.
Przeglądanie tablicy
dostęp do tablicy możemy zrealizować poprzez funkcją foreach(tablica) która wykona się dla każdego elementu tablicy (1 poziom). dzięki tej funkcji możemy wykonać np taką operację na pani Krysi:
Np: wyświetlmy dane w pożądanym formacie :
<?php foreach($tablica['osoba2'] as $klucz => $wartosc) { echo $klucz .' : '.$wartosc.' <br/>'; } ?>
imie : Krystyna aka : Krysia z gazowni wiek : 52
Lub dokonajmy zamiany wszystkich liter na duże :
<?php foreach($tablica['osoba2'] as $klucz => $wartosc) { $tablica['osoba2'][$klucz]=strtoupper($wartosc); } echo "pre>"; print_r($tablica['osoba2']); echo "</pre>"; ?>
Array
(
[imie] => KRYSTYNA
[aka] => KRYSIA Z GAZOWNI
[wiek] => 52
)
Sortowanie tablic
Nasza tablica bez sortowania wygląda tak :
<?php $tablica=array('Maciej1','Maciej3','Ania','Patryk','Maciej10','Marek','Paulina'); ?>
Array
(
[0] => Maciej1
[1] => Maciej3
[2] => Ania
[3] => Patryk
[4] => Maciej10
[5] => Marek
[6] => Paulina
)
asort
Funkcja asort: Posortuj tablicę zachowując skojarzenia kluczy
<?php asort($tablica); ?>
Array
(
[2] => Ania
[0] => Maciej1
[4] => Maciej10
[1] => Maciej3
[5] => Marek
[3] => Patryk
[6] => Paulina
)
arsort
Funkcja arsort() : Sortuje tablicę w porządku odwrotnym z zachowaniem skojarzenia kluczy
<?php arsort($tablica); ?>
Array
(
[6] => Paulina
[3] => Patryk
[5] => Marek
[1] => Maciej3
[4] => Maciej10
[0] => Maciej1
[2] => Ania
)
rsort
Funkcja rsort() : Sortuj tablicę w porządku odwrotnym bez zachowania skojarzeń kluczy
<?php rsort($tablica); ?>
Array
(
[0] => Paulina
[1] => Patryk
[2] => Marek
[3] => Maciej3
[4] => Maciej10
[5] => Maciej1
[6] => Ania
)
ksort
Funkcja ksort() : Sortuj tablicę według klucza
<?php ksort($tablica); ?>
Array
(
[0] => Paulina
[1] => Patryk
[2] => Marek
[3] => Maciej3
[4] => Maciej10
[5] => Maciej1
[6] => Ania
)
krsort
Funkcja krsort() Sortuj tablicę według klucza w porządku odwrotnym
<?php krsort($tablica); ?>
Array
(
[6] => Ania
[5] => Maciej1
[4] => Maciej10
[3] => Maciej3
[2] => Marek
[1] => Patryk
[0] => Paulina
)
natsort
Funkcja natsort() : Sortuj tablicę używając algortmu "porządek naturalny"
<?php natsort($tablica); ?>
Array
(
[6] => Ania
[5] => Maciej1
[3] => Maciej3
[4] => Maciej10
[2] => Marek
[1] => Patryk
[0] => Paulina
)
usort
Funkcja usort() : Sortuje tablicę według wartości korzystając ze zdefiniowanej przez użytkownika funkcji porównującej W przykładzie porównujemy tablicę według ilości znaków :
- Funkcja : strlen(string) - zwraca ilość znaków
- Funkcja : strcmp(string,string) - porównuje
<?php function sortujPoDlugosci($a,$b) { return strcmp(strlen($a),strlen($b)); } usort($tablica,'sortujPoDlugosci'); ?>
Array
(
[0] => Ania
[1] => Marek
[2] => Patryk
[3] => Maciej3
[4] => Maciej1
[5] => Paulina
[6] => Maciej10
)
różne funkcje operujące na tablicach
is_array
Funkcja is_array(tablica) sprawdza czy tablica jest tablicą
<?php $tablica=array('jeden','dwa','trzy'); $nieTablica="cztery"; if(is_array($tablica)) { echo 'To jest tablica <br/>'; } else { echo'To nie jest tablica </br>'; } if(is_array($nieTablica)) { echo 'To jest tablica <br/>'; } else { echo' To nie jest tablica </br>'; } ?>
To jest tablica To nie jest tablica
list
Funkcja list(wartosc1,wartosc2 ...) pozwala nam na przypisanie zmiennych tak jakby były tablicą
<?php // nasza tablica $tablica= array('Krystyna','Krysia z gazowni',52); // przypiszmy ją do zmiennych list($imie,$aka,$wiek)=$tablica; // i wyświetlmy echo 'Pani <b>'.$imie. '</b> `'.$aka.'` lat '.$wiek.' Dzwoniła '; ?>
Pani <b>Krystyna</b> `Krysia z gazowni` lat 52 Dzwoniła
explode
Funkcja explode(rozdzielacz,string) tworzy nam tablicę poprzez podzielenie tekstu określonym znakiem (nazwanym przezemnie `rozdzielaczem`);
<?php $dane="Krystyna:Krysia z gazowni:52"; $tablica=explode(':',$dane); echo "pre>"; print_r($tablica); echo "</pre>"; ?>
Array ( [0] => Krystyna [1] => Krysia z gazowni [2] => 52 )
join
Funkcja join(łącznik,tablica) pozwala nam na połączenie tablicy określonym znakiem lub ciągiem.
<?php $tablica= array('Krystyna','Krysia z gazowni',52); $zapytanie = join(':',$tablica); echo $zapytanie; ?>
Krystyna:Krysia z gazowni:52
count
Funkcja count(tablica) zwraca ilość elementów w tablicy.
<?php $tablica= array('Krystyna','Krysia z gazowni',52); $ile = count($tablica); echo $ile; ?>
3
in_array
Funkcja in_array(szukane,tablica) zwraca 1 (TRUE) jeśli odnajdzie w tablicy szukaną wartość lub 0 (FALSE) w przypadku gdy takiej wartości niema.
<?php $tablica= array('Krystyna','Krysia z gazowni',52); $szukane ='Krystyna'; if(in_array($szukane,$tablica)) { echo $szukane.' jest w tablicy'; } else { echo $szukane.' nie ma w tablicy'; } ?>
Krystyna jest w tablicy
array_sum
Funkcja array_sum(tablica) sumuje wszystkie elementy tablicy
<?php $tablica= array(1,21,32,22,21,3,4); $suma =array_sum($tablica); echo 'Suma : '.$suma; ?>
Suma : 104
array_chunk
Funkcja array_chunk(tablica,ile elementów, true/false) dzieli tablicę na określoną ilość elementów (przy ustawieniu na True - utrzymuje klucze) w innym przypadku liczy od nowa.
<?php $tablica = array('Tomek', 'Romek', 'Atomek'); ?>
Array ( [0] => Tomek [1] => Romek [2] => Atomek )
<?php echo "pre>"; print_r(array_chunk($tablica, 2, true)); echo "</pre>"; ?>
Array ( [0] => Array ( [0] => Tomek [1] => Romek ) [1] => Array ( [2] => Atomek ) )
array_fill
Funkcja array_fill(start,ile,wartość) tworzy i wypełnia tablicę podaną wartością
<?php $tablica=array_fill(3,4,'Temat'); ?>
Array ( [3] => Temat [4] => Temat [5] => Temat [6] => Temat )
array_keys
Funkcja array_keys(tablica) zwraca wszystkie klucze tablicy.
<?php $tablica= array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52); $klucze =array_keys($tablica); echo "pre>"; print_r($klucze); echo "</pre>"; ?>
Array ( [0] => imie [1] => aka [2] => wiek )
array_merge
Funkcja array_merge(tablica,tablica,tablica ...) łączy dwie lub więcej tablic dodając wartości jednej do końca drugiej, w przypadku gdy wartości są takie same wstawia nowsze wartości.
<?php $tablica1= array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52); $tablica2= array('nazwisko'=>'Kapon','miasto'=>'Jelenia Gora'); $tablica= array_merge($tablica1,$tablica2); echo "pre>"; print_r($tablica); echo "</pre>"; ?>
Array ( [imie] => Krystyna [aka] => Krysia z gazowni [wiek] => 52 [nazwisko] => Kapon [miasto] => Jelenia Gora )
array_pad
Funkcja array_pad(tablica,dopeśniaj Do,wartosc) dopełnia tablicę podanymi wartościami do określonej długości.
<?php $tablica= array(1,3,21,32); echo "Tablica pre>"; print_r($tablica); echo "</pre>"; $tablica = array_pad($tablica,6,0); echo "Dopeśniona tablica pre>"; print_r($tablica); echo "</pre>"; ?>
Tablica Array ( [0] => 1 [1] => 3 [2] => 21 [3] => 32 ) Dopeśniona tablica Array ( [0] => 1 [1] => 3 [2] => 21 [3] => 32 [4] => 0 [5] => 0 )
array_pop
Funkcja array_pop(tablica) zdejmuje ostatni element tablicy.
<?php $tablica= array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52); $resztka=array_pop($tablica); echo "Z tablicy została zdjąta wartość : ".$resztka; echo "pre>"; print_r($tablica); echo "</pre>"; ?>
Z tablicy została zdjąta wartość : 52 Array ( [imie] => Krystyna [aka] => Krysia z gazowni )
end
Funkcja end(tablica) ustawia wskaźnik tablicy na ostatnim jej elemencie (wybiera ostatni)
<?php $tablica= array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52); $koniec=end($tablica); ?>
Ostatnim elementem jest : 52
array_push
Funkcja array_push(tablica,wartosc1,wartosc2,...) wstawia jeden lub więcej elementów na koniec tablicy.
<?php $tablica= array('imie'=>'Krystyna','aka'=>'Krysia z gazowni','wiek'=>52); array_push($tablica,'kapon','Jelenia Gora'); echo "pre>"; print_r($tablica); echo "</pre>"; ?>
Array ( [imie] => Krystyna [aka] => Krysia z gazowni [wiek] => 52 [0] => kapon [1] => Jelenia Gora )
Tablice wielowymiarowe
Tworzenie
<?php $rodzina = array( array('windows', array('95','98','98se','ME','2000','xp') ), array('linux', array('fedora','mandriva','gento','ubuntu'=> array('bezy','dapper'=> array('kde','xfc','gnome') ) ) ), ); echo "pre>"; print_r($rodzina); echo "</pre>"; ?>
Array
(
[0] => Array
(
[0] => windows
[1] => Array
(
[0] => 95
[1] => 98
[2] => 98se
[3] => ME
[4] => 2000
[5] => xp
)
)
[1] => Array
(
[0] => linux
[1] => Array
(
[0] => fedora
[1] => mandriva
[2] => gento
[ubuntu] => Array
(
[0] => bezy
[dapper] => Array
(
[0] => kde
[1] => xfc
[2] => gnome
)
)
)
)
)
Praktyczne zastosowanie tablic
obsługa bazy danych
Wstąp
Jak zapewne wiecie bezy danych zwracają wynik w postaci tablicy danych, umiejątnie wykorzystując funkcje powiązane z tablicami możemy usprawnić wiele operacji na tych też bazach.
Zbudujemy prościutką klasą dzięki której będziemy obsługiwać podstawowe operacje na tabeli z danymi ludzi.
Oczywiście zapytania będziemy budować za pomcą tablic.
Struktura bazy
CREATE TABLE `ludzie` ( `id` int(11) NOT NULL auto_increment, `imie` varchar(30) collate utf8_polish_ci NOT NULL default '', `nazwisko` varchar(35) collate utf8_polish_ci NOT NULL default '', `miasto` varchar(50) collate utf8_polish_ci NOT NULL default '', `email` varchar(50) collate utf8_polish_ci NOT NULL default '', `telefon` int(14) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
Klasa obsługi
<?php class ludzieBaza { public $dane = array(); public $szukane = array(); public $nowe = array(); private $db; public function __construct($szukane=null) { if(is_array($szukane)) { $this->szukane=$szukane; } $this->db= new sql_db($host,$user,$haslo,$baza); } public function pobierzDane() { $sql=$this->db->sql_query("Select * From `ludzie` Where ".$this->listaWhere($this->szukane)." Limit 1"); $this->dane=$this->db->sql_fetchrow($sql); return $this->dane; } public function pobierzListe() { $sql=$this->db->sql_query("Select * From `ludzie` Where ".$this->listaLike($this->szukane)." Order by `imie` "); return $this->db->sql_fetchrowset($sql); } public function dodajNowego() { $sql=$this->db->sql_query("Insert INTO `ludzie` (".$this->listaInsert($this->nowe).") Values (".$this->listaWartosci($dane).")"); } public function zmienDane() { $sql=$this->db->sql_query("Update `ludzie` Set ".$this->listaUpdate($this->nowe)." Where ".$this->listaWhere($this->dane)." "); } // Opis taki sam dla reszty funkcji. private function listaWhere($dane) { // sprawdzamy czy podane dane są tablicą if(is_array($dane)) { // rozbijamy każdy element tablicy na klucz i jego wartość foreach($dane as $klucz => $wartosc) { // tworzymy tablicę która sama ustala wartość klucza $lista[]="`".$klucz."`='".$wartosc."'"; } // zwraca ciąg klucz=wartość połączony ciągiem AND return @join(' AND ',$lista); } } private function listaLike($dane) { if(is_array($dane)) { foreach($dane as $klucz => $wartosc) { $lista[]="`".$klucz."` LIKE '".$wartosc."'"; } return @join(' AND ',$lista); } } private function listaInsert($dane) { if(is_array($dane)) { return @join(',',array_keys($dane)); } } private function listaWartosci($dane) { if(is_array($dane)) { foreach($dane as $klucz => $wartosc) { $lista[]="'".$wartosc."'"; } return @join(',',array_values($lista)); } return 'Nie podano danych !'; } private function listaUpdate($dane) { if(is_array($dane)) { foreach($dane as $klucz => $wartosc) { $lista[]="`".$klucz."`='".$wartosc."'"; } return @join(',',array_values($lista)); } } } ?>
działałnie
Pobierzmy jakąś osobę :
<?php include "admin/klasy/bazaMySql.php5"; // przypisujemy tablicę z danymi osoby którą chcemy `załadować` $osoba=new ludzieBaza(array('imie'=>'Maciej','nazwisko'=>'Niepodam')); // ładujemy osobnika $osoba ->pobierzDane(); ?>
/* Zapytanie sql Select * From `ludzie` Where `imie`='Maciej' AND `nazwisko`='Niepodam' Limit 1 */
Dane pobrane z bazy danych :
Array
(
[id] => 2
[imie] => Maciej
[nazwisko] => Niepodam
[miasto] => Jelenia Gora
[email] => jakisAdres@email.pl
)
Zmieśmy dane tej osoby :
<?php // przypisujemy dane które mają być zmienione $osoba->nowe=array('miasto'=>'Wroclaw','email'=>'inny@email.pl'); $osoba->zmienDane(); ?>
/* Zapytanie sql Update `ludzie` Set `miasto`='Wroclaw',`email`='inny@email.pl' Where `id`='2' AND `imie`='Maciej' AND `nazwisko`='Niepodam' AND `miasto`='Jelenia Gora' AND `email`='jakisAdres@email.pl' */
Dodajmy nową osobę :
<?php $nowaOsoba=new ludzieBaza(); // przypisujemy dane nowej osobie za pomocą tablicy $nowaOsoba->nowe=array('imie'=>'Maciej','nazwisko'=>'Jupik','miasto'=>'JGA'); $nowaOsoba->dodajNowego(); ?>
/* Zapytanie sql
Insert INTO `ludzie` (imie,nazwisko,miasto) Values ('Maciej','Jupik','JGA')
*/
Pobierzmy listę osób które spełniają warunek :
<?php $listaOsob=new ludzieBaza(); $listaOsob->szukane=array('imie'=>'Ma%'); $listaOsob->pobierzListe(); ?>
/* Zapytanie sql Select * From `ludzie` Where `imie` LIKE 'Ma%' Order by `imie` */
