Po prawie trzech latach od publikacji pierwszej części „Sztuczek PHP”, postanowiłem nieco kontynuować temat. Oczywiście słowo „sztuczki” z tytułu należy traktować nieco z przymrużeniem oka
Tym razem prezentuję pięć „sztuczek”.
1. Parsowanie czasu (strtotime)
Funkcja strtotime jest jedną z tych, które warto znać i wykorzystywać w aplikacji bo znacznie ułatwia wszelkie operacje na datach. Kilka przykładów:
# otrzymamy datę ostatniego poniedziałku względem dzisiejszego dnia date('Y-m-d', strtotime ("last Monday")); # dostaniemy datę "za tydzień", czyli 2012-04-08 date('Y-m-d', strtotime("+1 week", strtotime("2012-04-01"))); # czasami potrzebujemy innego formatowania date("d.m.Y", strtotime("2012-04-01")) # otrzymamy datę: 01.04.2012 # działania matematyczne na datach, będących w różnych formatach są również bardzo proste strtotime("2012-04-01")-strtotime("12.03.2012"); # otrzymamy 1728000 sekund, czyli równe 20 dni :)
2. Hurtowe operacje
Bardzo często bywa tak, że potrzebujemy na zbiorze danych wykonać jakąś prostą operację. Przeważnie stosuje się do tego pętle for, foreach czy while. Można jednak zaoszczędzić nieco linii kodu korzystając z wbudowanej funkcji array_map().
$aTablica = array(1,-2,'abc','12c'); # wszystkie elementy tablicy zostaną przemapowane na typ integer $aTablica = array_map('intval', $aTablica); print_r($aTablica); # otrzymamy: Array ( [0] => 1 [1] => -2 [2] => 0 [3] => 12 )
3. Nie do końca stałe
Wykorzystywanie stałych wartości w aplikacji często się przydaje. Z definicji nie można w nich przechowywać typów wartości innych niż integer, float, string czy NULL. A co gdybyśmy chcieli w stałej przechowywać tablicę czy nawet obiekt?
$aTablica = array('a','b','c'); # przechowywanie w stałej tablicy w postaci zserializowanej, oczywiście to samo można zrobić z obiektem define('MOJA_STALA_SERIALIZE', serialize($aTablica)); # lub stosując funkcję json_encode() define('MOJA_STALA_JSON', json_encode($aTablica));
Od tego momentu mamy dostęp do stałej w której zapisana jest tablica w postaci zserializowanej, wystarczy ją odserializować (unserialize()) i mamy już w pełni funkcjonującą tablicę. To samo oczywiście można uzyskać stosując funkcje jsona (json_encode() i json_decode()).
4. Dodawanie tablic
$a1 = array(0=>'a',1=>'b'); $a2 = array(2=>'c',3=>'b'); $a3 = $a1+$a2; # wynikiem będzie Array ( [0] => a [1] => b [2] => c [3] => b )
Jak widać w przykładzie tablice można „dodawać” (a raczej łączyć przy pomocy „+”, taki zamiennik array_merge()). Warunkiem nie nadpisywania wartości są oczywiście różne klucze.
5. Bit me
Przechowywanie informacji w postaci sum bitowych w niektórych przypadkach może być przydatne. Przykładowo mamy kategorie którym przypisane są poszczególne bity:
kategoria A: 1
kategoria B: 2
kategoria C: 4
Chcemy w jednej zmiennej (lub np. polu bazy danych) przechować informację o tym, że użytkownik zaznaczył w formularzu kategorię A oraz kategorię C. W tym celu wystarczy podczas wysłania formularza zsumować przypisane im bity (w przykładzie da to sumę 5). Następnie (np. podczas pobierania danych) aby sprawdzić czy bity wybranych kategorii „zawierają się” w zapisanej łącznej wartości należy wykonać operację jak w przykładzie:
$iSumaBit = 5; # zapisana suma bitów wybranych kategorii # dostępne kategorie $aKategorie = array( 1=>'kategoria A', 2=>'kategoria B', 4=>'kategoria C' ); # sprawdzenie które kategorie wybrano foreach($aKategorie as $iBit=>$sKategoria){ if(($iBit & $iSumaBit ) > 0){ echo $sKategoria." została wybrana <br />"; } }
Oczywiście możliwości zabawy na bitach jest dużo więcej… Nie polecam natomiast tego rozwiązania do przechowywania dużej ilości informacji gdyż dość szybko może się nam skończyć wielkość integer (informacja zapisana w stałej PHP_INT_MAX).


Najnowsze komentarze