środa,
PHP: Konkatenacja i pętle
Konkatenacja w pętlach to konstrukcja często stosowana w programowaniu, polegająca na łączeniu łańcuchów znaków w trakcie iteracji pętli. Umożliwia to dynamiczne budowanie długiego ciągu znaków z mniejszych fragmentów. Przykładem może być tworzenie tekstu z elementów listy lub tablicy. W językach takich jak PHP używa się typowych operatorów konkatenacji (. w PHP) wewnątrz pętli, aby sukcesywnie dodawać nowe elementy do łańcucha.
Istnieje wiele sposobów na wykonywanie konkatenacji. Prezentowane przykłady to kilka spośród nich. Wybór optymalnego rozwiązania zależy od okoliczności.
We wszystkich przykładach generowana jest ta sama tabela HTML zawierająca testowe dane. Składnia jest bardzo podobna, w każdym przebiegu pętli foreach łączonych jest kilka łańcuchów znaków. Efekt działania każdego prezentowanego rozwiązania znajduje się na końcu artykułu.
Testowe dane
Wykorzystane w przykładach dane to struktura zawierająca dane na temat imienia i nazwiska w postaci tablicy dwuwymiarowej.
$names = [
['Henry','Franklin'],
['Tyler','Watts'],
['Laith','Mcfadden'],
['Brendan','Pratt'],
['Marsden','Warren'],
['Jackson','Harris'],
['Edan','Gordon'],
['Chadwick','Rojas'],
['Josiah','Henson'],
['Raymond','Gonzales']
];
Operator konkatenacji
W języku PHP operatorem konkatenacji jest kropka (.). Jego działanie prezentuje poniższy przykład. Jest to prawdopodobnie najpopularniejsze rozwiązanie.
echo '<table>';
foreach ($names as $name) {
echo '<tr><td>' . $name[0] . '</td><td>' . $name[1] . '</td></tr>';
}
echo '</table>';
Funkcja printf
Kolejny sposób to skorzystanie z funkcji printf(). Jej pierwszym argumentem jest szablon zawierający pola do wypełnienia. W przykładzie wykorzystano dwa pola %s oznaczające łańcuch znaków. Oznacza to, że należy dostarczyć w ich miejsce wartości w postaci dwóch dodatkowych argumentów funkcji.
echo '<table>';
foreach ($names as $name) {
printf('<tr><td>%s</td><td>%s</td></tr>', $name[0], $name[1]);
}
echo '</table>';
Funkcja vprintf
Funkcja vprintf to odmiana printf. Drugi argument to tablica zawierająca dane. Rozwiązanie jest dość wygodne w przypadku większej ilości pól. Ważne jest, aby zadbać o właściwą kolejność elementów tablicy.
echo '<table>';
foreach ($names as $name) {
vprintf('<tr><td>%s</td><td>%s</td></tr>', $name);
}
echo '</table>';
Funkcja printf w połączeniu z implode
Optymalne i zwięzłe rozwiązanie w przypadku dużej ilości pól. Poniższy kod bez żadnej modyfikacji może obsłużyć np. 50 i więcej pól tabeli. Funkcja implode łączy elementy tablicy za pomocą łańcucha znaków podanego jako pierwszy argument. Ważne jest, aby zadbać o właściwą kolejność elementów tablicy.
echo '<table>';
foreach ($names as $name) {
printf('<tr><td>%s</td></tr>', implode('</td><td>', $name));
}
echo '</table>';
Wyskakiwanie z kodu HTML
Kiedy interpreter PHP przetwarza plik, wyszukuje kodu PHP na podstawie jego znaczników. Wszystko poza nimi jest ignorowane przez parser. Dzięki tej własności można zagnieżdżać kod PHP w dowolnym dokumencie tak jak w poniższym przykładzie. Krótkie znaczniki (<?=) nie w każdej konfiguracji będą dostępne. Można je zastąpić standardowymi znacznikami (<?php) i instrukcją echo, jednak wtedy rozwiązanie nie będzie już tak zwięzłe.
<table>
<?php foreach ($names as $name) { ?>
<tr>
<td><?=$name[0]?></td>
<td><?=$name[1]?></td>
</tr>
<?php } ?>
</table>
Henry | Franklin |
Tyler | Watts |
Laith | Mcfadden |
Brendan | Pratt |
Marsden | Warren |
Jackson | Harris |
Edan | Gordon |
Chadwick | Rojas |
Josiah | Henson |
Raymond | Gonzales |