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.
Jeśli mamy do czynienia ze stringiem używamy funkcji str_pad:
$string = "kawalek";
$string = str_pad($string, 10);
Funkcja str_pad przyjmuje 4 argumenty, przy czym 2 pierwsze są wymagane, 2 ostatnie opcjonalne.
Trzeci argument to "wypełniacz", który nie musi być jednoznakowym łańcuchem, przy czym długość "wypełniacza" zalicza się na poczet docelowego dopełnienia.
W powyższym przykładzie otrzymamy string "kawalek ".
$string = "kawalek";
$string = str_pad($string, 10, "+", STR_PAD_LEFT);
Tu natomiast otrzymamy string "+++kawalek", bowiem użyliśmy dwóch pozostałych argumentów. Jeden z nich określa jakim ciągiem będzie dopełniony string (brak tego parametru to dopełnienie spacjami). Drugi określa jak będzie dopełniany string: STR_PAD_LEFT (z lewej), STR_PAD_RIGHT (z prawej, również przy braku tego parametru), STR_PAD_BOTH (z obydwu równomiernie).
Jak to wygląda w MySQL?
Mamy do dyspozycji dwie oddzielne funkcje: LPAD oraz RPAD. Jak się łatwo domyślić, jedna dopełnia od lewej, druga od prawej.
SELECT LPAD('kawalek',10,'0123');
W wyniki powyższego działania otrzymamy wartość 012kawalek
Bardziej praktyczny przykład:
SELECT LPAD(pole1,4,'0') FROM tabela;
To zapytanie przy założeniu, że wartości w kolumnie pole1 są liczbowe i mniejsze od 1000, zwróci te wartości dopełnione zerami od lewej. Dla wartości 1 otrzymamy '0001', dla wartości 156 - '0156'.
Pozostał jeszcze JavaScript.
Tu dla stringów mamy dostępne dwie metody padStart (dopełniająca od lewej) oraz padEnd (dopełniająca z prawej).
var string = 'kawalek';
string = string.padStart(10, '+');
Zmienna string przyjmie w tym przypadku wartość '+++kawalek'. Drugi argument metody nie jest wymagany - w przypadku braku string będzie dopełniony spacją.
W JavaScript nie ma na tą chwilę metody pozwalającej dopełnić tablicę, ale można to osiągnąć prostym kodem:
var a = [1, 13, 55, 21];
var b = new Array(10).fill(0); // tworzymy tablicę z dziesięciu elementów i wypełniamy ją zerami
a = a.concat(b.slice(a.length)); // łączymy tablicę źródłową z wycinkiem tablicy b (od indeksu 4)
lub jeszcze prościej:
var a = [1, 13, 55, 21];
a = a.concat(new Array(10).fill(0).slice(a.length));
W obydwu przypadkach otrzymany dziesięcioelementową tablicę, powstałą z dopełnienia zerami tablicy źródłowej. Metoda slice przyjmuje jako pierwszy argument indeks, od którego zaczyna wycinać fragment tablicy. Brak drugiego argumentu (indeks, na którym kończy się wycinanie) powoduje cięcie do końca. W podanym przykładzie tablica "a" jest czteroelementowa, tak więc wycinanie zacznie się od czwartego indeksu (piątego elementu) do końca (dziesiątego elementu) tablicy zer.
Czy już wiesz, że długość może mieć znaczenie?
Przydatne linki:
Funkcja array_pad
Funkcja str_pad
Funkcja LPAD w MySQL
Funkcja RPAD w MySQL
Metoda padStart w JS
Metoda padEnd w JS
Metoda fill w JS