Kirjoitussilmukat PHP:ssä: kaksi tapaa; Sama asia
Kun työskentelet PHP:n kokoelman, erityisesti PHP:n taulukoiden, kanssa, näet ensisijaisesti kaksi tapaa, joilla tietoja käsitellään:
forsilmukoiden läpi ,arrayPHP :n tarjoamien toimintojen kautta .
Mitä sen arvoista on, mielestäni array funktiot tarjoavat paremman luettavuuden, mutta niiden on osoitettu olevan hitaampia (varsinkin suuremmilla tiedoilla – pienemmillä tiedoilla se on luonnollisesti merkityksetöntä).
Työskentelen usein forsilmukoiden ja niihin liittyvien funktioiden kanssa saavuttaakseni saman asian, mutta ajattelin, että voisi olla syytä tarkastella esimerkkiä edellisestä viestistä ja siitä, kuinka käytin arrayfunktioita saavuttaakseni samat asiat kuin for silmukalla.
Loppujen lopuksi tämä on vertailuviesti, mutta mielestäni on hyvä nähdä, kuinka sama koodi voidaan kirjoittaa eri tavoin.
Kirjoitussilmukat PHP:llä
Aluksi en väitä kumpi on parempi. Tämä on yksinkertaisesti osoittamaan, kuinka kirjoitussilmukoita PHP:ssä voidaan saavuttaa useilla tavoilla.
On sinusta kiinni, miten haluat toteuttaa sen.
Tämän esimerkin tavoitteena on näyttää:
- kuinka saada tunnisteet tietylle viestille,
- lue heidän nimensä on putkilla eroteltu taulukko,
- palauttaa tunnisteen nimet putkella erotettuina merkkijonomuodossa.
Ja tässä on kaksi tapaa tehdä se.
Normaalisilmukan käyttäminen
Vakiosilmukan käyttö for voi näyttää tältä:
<?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, '|');
Huomaa, että minä:
- alusta merkkijono,
- lue tunnisteet
- iteroita niitä ja lisää ne vain, jos niitä ei vielä ole,
- erota ryhmä putkella,
- poista mahdolliset peräputket
Sitten minulla on merkkijono, jonka voin palauttaa.
Taulukkofunktioiden käyttäminen
Tässä esimerkissä teen saman asian, mutta koodi on hieman kompaktimpi:
<?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())) );
On hyödyllistä lukea koodi sisimmästä toiminnosta uloimpaan. Tämän kanssa tapahtuu seuraavaa:
- Otan tunnisteet ja toistan ne jokaisen läpi käyttämällä nimetöntä funktiota, joka on siirretty
array_map: - Käytän sitten palautettua taulukkoa ja välitän sen
array_filterniin, että kaksoiskappaleet poistetaan, - Sitten muunnan taulukon putkilla erotetuksi merkkijonoksi.
Kuten edellä, minulla on merkkijono, jonka voin palauttaa.
Se siitä?
Jep – ja siinä se. En väitä, että toisen funktion luettavuus olisi parempi, mutta sanon, että se vaatii vähemmän vaiheita.
Muista myös, että suuremmat tietojoukot eivät välttämättä toimi yhtä hyvin.
Siitä huolimatta, sisäänrakennettujen taulukkofunktioiden käyttäminen on todella mukavaa, koska se tarjoaa PHP:lle alkuperäisiä sisäänrakennettuja toimintoja (kun taas for silmukat ovat yleisempiä kaikilla kielillä), mikä voi säästää aikaa (kuten päällekkäisten tietojen suodattaminen).
Onko viitteitä?
Itseasiassa kyllä. PHP-käsikirjan lisäksi Carl Alexanderilla on luultavasti kattavin artikkeli tästä aiheesta.
Kannattaa käyttää aikaa lukea se kokonaisuudessaan, varsinkin jos pidit tämän postauksen kiinnostavana.
