Pisanie pętli w PHP: dwa sposoby; Ta sama rzecz
Kiedy pracujesz z kolekcją w PHP, przede wszystkim z tablicami w PHP, istnieją dwa sposoby, dzięki którym widzisz manipulowane informacje:
- przez
forpętle, - poprzez różne
arrayfunkcje udostępniane przez PHP.
Co jest warte, myślę, że array funkcje zapewniają większą czytelność, ale wykazano, że działają wolniej (zwłaszcza w przypadku większych danych – przy mniejszych danych naturalnie będzie to pomijalne).
Często pracuję z forpętlami i powiązanymi funkcjami, aby osiągnąć to samo, ale pomyślałem, że warto spojrzeć na przykład z poprzedniego postu i jak wykorzystałem arrayfunkcje, aby osiągnąć te same rzeczy, co for pętla.
Ostatecznie jest to post porównawczy, ale myślę, że dobrze jest zobaczyć, jak ten sam kod można napisać na różne sposoby.
Pisanie pętli w PHP
Na wstępie nie twierdzę, co jest lepsze. Jest to po prostu pokazanie, jak pisanie pętli w PHP można osiągnąć na wiele sposobów.
Od Ciebie zależy, jak chcesz to zaimplementować.
Celem tego przykładu jest pokazanie:
- jak zdobyć tagi dla danego posta,
- przeczytaj ich nazwy jest tablicą rozdzielaną potoku,
- zwracają nazwy znaczników oddzielone potoku w formacie ciągu.
A oto dwa sposoby, aby to zrobić.
Korzystanie ze standardowej pętli
Użycie standardowej for pętli może wyglądać mniej więcej tak:
<?php
// Setup the array to store the tag names.
$tagNames = [];
// Iterate through all of the tags.
$tags = get_the_tags();
for ($i = 0; $i < count($tags); $i++) {
$currentTag = $tags[$i];
// Only add names that have not been added.
if (!in_array($currentTag->name, $tagNames)) {
$tagNames[] = $currentTag->name;
}
}
// Break the names of the the tags into a '|' delimited string.
$tagNameString = implode('|', $tagNames);
// Clean up the string so any trailing pipes are removed.
$tagNameString = rtrim($tagNameString, '|');
Zauważ, że ja:
- zainicjować ciąg,
- przeczytaj tagi
- iterować przez nie i dodawać je tylko wtedy, gdy jeszcze nie istnieją,
- oddzielić tablicę za pomocą potoku,
- usuń wszelkie wleczące się rury
Następnie mam ciąg, który mogę zwrócić.
Korzystanie z funkcji tablicy
W tym przykładzie robię to samo, ale kod jest nieco bardziej zwarty:
<?php
// Seperate each indidivudal entry by a '|'
implode(
'|',
// Remove any duplicates in the array.
array_filter(
/* iterate through the list of tags and add the names to an
* array that's returned to filter.
*/
array_map(function ($tag) {
return $tag->name;
}, get_the_tags())) );
Pomocne jest odczytanie kodu od najbardziej wewnętrznej funkcji do najbardziej zewnętrznej. Oto, co się dzieje:
- Biorę tagi, iteruję każdy z nich za pomocą anonimowej funkcji przekazanej do
array_map, - Następnie używam zwróconej tablicy i przekazuję ją,
array_filteraby duplikaty zostały usunięte, - Następnie przekształcam tablicę w ciąg rozdzielany potokami.
Podobnie jak powyżej, mam ciąg, który mogę zwrócić.
Otóż to?
Tak – i to wszystko. Nie mówię, że czytelność drugiej funkcji jest lepsza, ale powiem, że wymaga mniej kroków.
Pamiętaj też, że większe zestawy danych mogą nie działać tak dobrze.
Niezależnie od tego, korzystanie z wbudowanych funkcji tablicowych jest naprawdę przyjemne, ponieważ zapewnia poziom wbudowanej funkcjonalności natywnej dla PHP (podczas gdy for pętle są bardziej powszechne we wszystkich językach), które mogą nam zaoszczędzić czas (jak filtrowanie zduplikowanych danych).
Jakieś referencje?
Aktualnie tak. Wydaje mi się, że oprócz podręcznika PHP Carl Alexander ma prawdopodobnie najobszerniejszy artykuł na ten temat.
Warto poświęcić czas na przeczytanie go w całości, zwłaszcza jeśli ten post był dla Ciebie interesujący.
