Loopide kirjutamine PHP-s: kaks võimalust; Sama asi
Kui töötate PHP-s kogumiga, eriti PHP-massiividega, on kaks võimalust, kuidas teavet peamiselt manipuleeritakse:
- läbi
forsilmuste, - PHP pakutavate erinevate
arrayfunktsioonide kaudu.
Arvan, et array funktsioonid pakuvad paremat loetavust, kuid need on osutunud aeglasemaks (eriti suuremate andmete puhul – väiksemate andmete puhul on see loomulikult tühine).
Ma töötan sageli fortsüklite ja seotud funktsioonidega, et saavutada sama asi, kuid arvasin, et tasub vaadata näidet eelmisest postitusest ja sellest, kuidas ma kasutasin funktsioone tsükliga array samade asjade saavutamiseks .for
Lõppkokkuvõttes on see võrdluspostitus, kuid minu arvates on hea näha, kuidas sama koodi saab erineval viisil kirjutada.
Loopide kirjutamine PHP-s
Alguses ma ei väida, kumb on parem. See on lihtsalt selleks, et näidata, kuidas PHP-s tsüklite kirjutamist saab saavutada mitmel viisil.
See, kuidas soovite seda rakendada, on teie otsustada.
Selle näite eesmärk on näidata:
- kuidas saada antud postituse silte,
- loe nende nimesid on torudega eraldatud massiiv,
- tagastab toruga eraldatud sildinimed stringivormingus.
Ja siin on kaks võimalust seda teha.
Standardse silmuse kasutamine
Standardse for tsükli kasutamine võib välja näha umbes selline:
<?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, '|');
Pange tähele, et ma:
- initsialiseerida string,
- lugege silte
- korrake neid ja lisage need ainult siis, kui neid veel pole,
- eraldage massiiv toru abil,
- eemaldage kõik järeltorud
Siis on mul nöör, mille saan tagastada.
Massiivifunktsioonide kasutamine
Selles näites teen sama asja, kuid kood on veidi kompaktsem:
<?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())) );
Kasulik on lugeda koodi sisemisest funktsioonist välimiseni. Sellega toimub järgmine:
- Võtan sildid ja kordan neid kõiki, kasutades anonüümset funktsiooni, mis on edastatud
array_map, - Seejärel kasutan tagastatud massiivi ja edastan selle
array_filternii, et duplikaadid eemaldatakse, - Seejärel teisendan massiivi toruga eraldatud stringiks.
Sarnaselt ülaltoodule on mul string, mille saan tagastada.
See on see?
Jah – ja kõik. Ma ei ütle, et teise funktsiooni loetavus on parem, kuid ma ütlen, et see nõuab vähem samme.
Pidage meeles ka seda, et suuremad andmekogumid ei pruugi sama hästi toimida.
Sellest hoolimata on sisseehitatud massiivifunktsioonide kasutamine tõesti tore, kuna see pakub PHP-le omaseid sisseehitatud funktsioone (kusjuures for tsüklid on kõigis keeltes tavalisemad), mis võib meie aega säästa (nt dubleerivate andmete filtreerimine).
Mingeid viiteid?
Tegelikult jah. Lisaks PHP käsiraamatule on Carl Alexanderil sellel teemal vaieldamatult kõige põhjalikum artikkel.
Selle tervikuna lugemiseks tasub kulutada aega, eriti kui see konkreetne postitus oli teile huvitav.
