Kawałek Kodu

Co tu się odskryptala?! Czyli programistyczne porady na luzie

To be or not to be, that is the query...czyli jak unikać dynamicznego budowania zapytania SQL w zależności od istnienia wartości.

Czasem masz dobry humor, a czasem zły. W obydwu przypadkach możesz zostać w domu.
Czasem do Twojego zapytania dociera wartość wykorzystywana w klauzuli WHERE, a czasem jej kompletnie brak.

Czy w tym przypadku możesz używać stałej składni zapytania bez potrzeby jej modyfikowania w zależności od istnienia tejże wartości?

Czytaj dalej

Znikający punkt, czyli o przesyłaniu wartości niezaznaczonych checkboxów.

Tworząc formularz z polem typu checkbox, zauważyłeś pewnie (bo ja tak), że takie pole kiedy nie jest zaznaczone, nie jest wysyłane wraz z formularzem.

Czy jest możliwe zmuszenie checkbox'a aby choć raz powiedział "nie", zamiast ciągłego krakania "tak"?

Czytaj dalej

"The tag is out there", czyli DOMXPath S01E01.

Jeśli miałeś kiedyś potrzebę przeszukiwania kod HTML pod kątem wyłuskania jakichś informacji, to pewnie korzystałeś z wyrażeń regularnych, a potem trafiłeś na drogę prowadzącą do narzędzi typu PHP Simple HTML Dom Parser.

Wyrażenia regularne mogą być kłopotliwe same w sobie, a powiązanie ich ze strukturą HTML może przyprawić o ból głowy. Wspomniany parser przenosi nas o poziom wyżej pod względem wygody użytkowania, ale i tak nie spełnia wszystkich pokładanych weń nadziei. Wyszukiwanie elementów, których nie znamy dokładnego położenia (może być zmienne) staje się wprost niemożliwe, trafiamy więc w ślepy zaułek.

Którą z dróg wybrać?

Czytaj dalej

Doctor, doctor, doctor... Czyli jak uzupełnić tablicę do zadanej długości.

Czasem zdarza się, że potrzebujesz dopełnić tablicę lub string do długości innej, większej niż aktualna długość elementu. Np. z jakiegoś powodu chcesz aby tablica miała zawsze 100 elementów.

W przypadku tablicy w PHP używamy funkcji array_pad:

$array = [1, 44, 13, 23];
$array = array_pad($array, 10, 15);

Wynikiem działania tej funkcji będzie tablica dziesięcioelementowa, dopełniona "od prawej strony" sześcioma elementami o wartości 15.
Argument drugi może przyjąć wartość ujemną. Wtedy dopełnienie następuje na początku tablicy.

Czytaj dalej

Palcem po mapach, czyli sitemap dla strony wielojęzykowej.

Jeśli Twój serwis jest wielojęzykowy, to pewnie użyłeś jednego ze sposóbów na przekazywanie wersji językowej w adresie URL:

  1. Zmienna językowa w query string, np.: http://mojadomena.pl/podstrona?lang=pl
  2. Zmienna językowa jako podkatalog, np: http://mojadomena.pl/en/podstrona/
  3. Zmienna językowa jako subdomena, np: http://en.mojadomena.pl
  4. Zmienna językowa przypisana do domeny (odrębna dla każdej domeny), np: http://mojadomena.pl, http://mojadomena.co.uk

O ile w pierwszym i drugim przypadku budowa mapy jest oczywista, bowiem mapa zawiera wszystkie URL niezależnie od języka, tak w przypadku subdomeny lub domeny wyłącznie dla jednego języka, mapa będzie zawierać URL tylko z tej wersji językowej. A skoro serwis fizycznie zajmuje to samo miejsce na serwerze, tak więc i mapa serwisu dla każdej wersji jezykowej będzie w tym samym miejscu.
Ale przecież zgodnie z sugestią Google plik mapy ma mieć ustaloną nazwę, np. sitemap.xml (dla mapy w formcie XML) lub sitemap.txt (dla mapy w postaci pliku tekstowego). Na pewno nie mogą to być pliki o nazwach sitemap_pl.xml dla wersji polskiej i sitemap_en.xml dla wersji angielskiej.

Czytaj dalej

Dobierzcie się w pary, czyli łączenie nieparzystych i parzystych elementów z dwóch tablic.

Bycie swatką lub swatem w życiu na pierwszy rzut oka wydaje się prostym i wdzięcznym zajęciem. Jeśli para ma się ku sobie, sprawa załatwiona, gorzej jeśli dwa "elementy" nijak nie chcą się zejść.

Ostatnio przykleiło się do mnie podobne zadanie, ale na szczęście nie w życiu, choć i tu perturbacje były spore. Miałem potrzebę połączenia dwóch tablic, z których jedna z nich zawierała elementy na pozycjach nieparzystych, a druga na pozycjach parzystych. Problem wydaje się prosty, ale celem było otrzymanie tablicy, w której kolejno na pozycje nieprzyste wpadają elementy z tablicy "nieparzystej", a na pozycje parzyste elementy z tablicy "parzystej". No i nadal problem nie wydaje się skomplikowany...
Jednak jest jeszcze jedna kluczowa (sic!) kwestia, mianowcie obydwie tablice były asocjacyjne, a klucze i kolejność występowania elementów w każdej z nich musiała być odwzorowana w tabeli docelowej.

Podsumowując, założenia są następujące:

  • mamy dwie tablice źródłowe,
  • obydwie tablice są asocjacyjne,
  • obydwie tablice są tej samej długości,
  • na pozycjach, które nas nie interesują mogą wystąpić dowolne wartości,
  • klucze mają być zachowane,
  • kolejność ma być zachowana.

Przykładowe tablice źródłowe:

$array1 = [23 => 'a', 14 => null, 1 => 'b', 56 => ''];
$array2 = [2 => 'xxx', 6 => 'c', 11 => null, 'o1' => 'd'];

A docelowa ma wyglądać tak:

$array = [23 => 'a', 6 => 'c', 1 => 'b', 'o1' => 'd'];
Czytaj dalej