{"id":231328,"date":"2022-12-18T12:56:00","date_gmt":"2022-12-18T09:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231328"},"modified":"2022-12-07T09:57:41","modified_gmt":"2022-12-07T06:57:41","slug":"kirjoitussilmukat-php-ssae-kaksi-tapaa-sama-asia","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitussilmukat-php-ssae-kaksi-tapaa-sama-asia\/","title":{"rendered":"Kirjoitussilmukat PHP:ss\u00e4: kaksi tapaa; Sama asia"},"content":{"rendered":"\n<p>Kun ty\u00f6skentelet PHP:n kokoelman, erityisesti PHP:n taulukoiden, kanssa, n\u00e4et ensisijaisesti kaksi tapaa, joilla tietoja k\u00e4sitell\u00e4\u00e4n:<\/p>\n<ol>\n<li><code>for<\/code>silmukoiden l\u00e4pi ,<\/li>\n<li><code>array<\/code>PHP :n tarjoamien toimintojen kautta .<\/li>\n<\/ol>\n<p>Mit\u00e4 sen arvoista on, mielest\u00e4ni <code>array<\/code>\u00a0funktiot tarjoavat paremman luettavuuden, mutta niiden on osoitettu olevan hitaampia (varsinkin suuremmilla tiedoilla &#8211; pienemmill\u00e4 tiedoilla se on luonnollisesti merkitykset\u00f6nt\u00e4).<\/p>\n<p>Ty\u00f6skentelen usein <code>for<\/code>silmukoiden ja niihin liittyvien funktioiden kanssa saavuttaakseni saman asian, mutta ajattelin, ett\u00e4 voisi olla syyt\u00e4 tarkastella esimerkki\u00e4 <a href=\"https:\/\/tommcfarlin.com\/tags-without-links-1-4-0\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">edellisest\u00e4 viestist\u00e4<\/a> ja siit\u00e4, kuinka k\u00e4ytin <code>array<\/code>funktioita saavuttaakseni samat asiat kuin <code>for<\/code>\u00a0silmukalla.<\/p>\n<p>Loppujen lopuksi t\u00e4m\u00e4 on vertailuviesti, mutta mielest\u00e4ni on hyv\u00e4 n\u00e4hd\u00e4, kuinka sama koodi voidaan kirjoittaa eri tavoin.<\/p>\n<h2>Kirjoitussilmukat PHP:ll\u00e4<\/h2>\n<p>Aluksi en v\u00e4it\u00e4 kumpi on parempi. T\u00e4m\u00e4 on yksinkertaisesti osoittamaan, kuinka kirjoitussilmukoita PHP:ss\u00e4 voidaan saavuttaa useilla tavoilla.<\/p>\n<p>On sinusta kiinni, miten haluat toteuttaa sen.<\/p>\n<p>T\u00e4m\u00e4n esimerkin tavoitteena on n\u00e4ytt\u00e4\u00e4:<\/p>\n<ul>\n<li>kuinka saada tunnisteet tietylle viestille,<\/li>\n<li>lue heid\u00e4n nimens\u00e4 on putkilla eroteltu taulukko,<\/li>\n<li>palauttaa tunnisteen nimet putkella erotettuina merkkijonomuodossa.<\/li>\n<\/ul>\n<p>Ja t\u00e4ss\u00e4 on kaksi tapaa tehd\u00e4 se.<\/p>\n<h3>Normaalisilmukan k\u00e4ytt\u00e4minen<\/h3>\n<p>Vakiosilmukan k\u00e4ytt\u00f6 <code>for<\/code>\u00a0voi n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup the array to store the tag names.\n$tagNames = [];\n\n\/\/ Iterate through all of the tags.\n$tags = get_the_tags();\nfor ($i = 0; $i &lt; count($tags); $i++) {\n  $currentTag = $tags[$i];\n\n  \/\/ Only add names that have not been added.\n  if (!in_array($currentTag-&gt;name, $tagNames)) {\n      $tagNames[] = $currentTag-&gt;name;\n  }\n}\n\n\/\/ Break the names of the the tags into a '|' delimited string.\n$tagNameString = implode('|', $tagNames);\n\n\/\/ Clean up the string so any trailing pipes are removed.\n$tagNameString = rtrim($tagNameString, '|');\n<\/code><\/pre>\n<p>Huomaa, ett\u00e4 min\u00e4:<\/p>\n<ol>\n<li>alusta merkkijono,<\/li>\n<li>lue tunnisteet<\/li>\n<li>iteroita niit\u00e4 ja lis\u00e4\u00e4 ne vain, jos niit\u00e4 ei viel\u00e4 ole,<\/li>\n<li>erota ryhm\u00e4 putkella,<\/li>\n<li>poista mahdolliset per\u00e4putket<\/li>\n<\/ol>\n<p>Sitten minulla on merkkijono, jonka voin palauttaa.<\/p>\n<h3>Taulukkofunktioiden k\u00e4ytt\u00e4minen<\/h3>\n<p>T\u00e4ss\u00e4 esimerkiss\u00e4 teen saman asian, mutta koodi on hieman kompaktimpi:<\/p>\n<pre><code>&lt;?php\n\n\/\/ Seperate each indidivudal entry by a '|'\nimplode(\n  '|',\n  \/\/ Remove any duplicates in the array.\n  array_filter(\n    \/* iterate through the list of tags and add the names to an \n     * array that's returned to filter.\n     *\/\n    array_map(function ($tag) {\n      return $tag-&gt;name;\n    }, get_the_tags())) );<\/code><\/pre>\n<p>On hy\u00f6dyllist\u00e4 lukea koodi sisimm\u00e4st\u00e4 toiminnosta uloimpaan. T\u00e4m\u00e4n kanssa tapahtuu seuraavaa:<\/p>\n<ol>\n<li>Otan tunnisteet ja toistan ne jokaisen l\u00e4pi k\u00e4ytt\u00e4m\u00e4ll\u00e4 nimet\u00f6nt\u00e4 funktiota, joka on siirretty <code>array_map<\/code>:<\/li>\n<li>K\u00e4yt\u00e4n sitten palautettua taulukkoa ja v\u00e4lit\u00e4n sen <code>array_filter<\/code>\u00a0niin, ett\u00e4 kaksoiskappaleet poistetaan,<\/li>\n<li>Sitten muunnan taulukon putkilla erotetuksi merkkijonoksi.<\/li>\n<\/ol>\n<p>Kuten edell\u00e4, minulla on merkkijono, jonka voin palauttaa.<\/p>\n<h3>Se siit\u00e4?<\/h3>\n<p>Jep \u2013 ja siin\u00e4 se. En v\u00e4it\u00e4, ett\u00e4 toisen funktion luettavuus olisi parempi, mutta sanon, ett\u00e4 se vaatii v\u00e4hemm\u00e4n vaiheita.<\/p>\n<p>Muista my\u00f6s, ett\u00e4 suuremmat tietojoukot eiv\u00e4t v\u00e4ltt\u00e4m\u00e4tt\u00e4 toimi yht\u00e4 hyvin.<\/p>\n<p>Siit\u00e4 huolimatta, sis\u00e4\u00e4nrakennettujen taulukkofunktioiden k\u00e4ytt\u00e4minen on todella mukavaa, koska se tarjoaa PHP:lle alkuper\u00e4isi\u00e4 sis\u00e4\u00e4nrakennettuja toimintoja (kun taas <code>for<\/code>\u00a0silmukat ovat yleisempi\u00e4 kaikilla kielill\u00e4), mik\u00e4 voi s\u00e4\u00e4st\u00e4\u00e4 aikaa (kuten p\u00e4\u00e4llekk\u00e4isten tietojen suodattaminen).<\/p>\n<h2>Onko viitteit\u00e4?<\/h2>\n<p>Itseasiassa kyll\u00e4. <a href=\"https:\/\/secure.php.net\/manual\/en\/ref.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP-k\u00e4sikirjan<\/a> lis\u00e4ksi <a href=\"https:\/\/carlalexander.ca\/php-array-functions-instead-loops\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Carl Alexanderilla<\/a> on luultavasti kattavin artikkeli t\u00e4st\u00e4 aiheesta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161046-61e71a7e3ffca.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161046-61e71a7e3ffca.png\" alt=\"Kirjoitussilmukat PHP:ss\u00e4: kaksi tapaa; Sama asia\" ><\/a><\/p>\n<p>Kannattaa k\u00e4ytt\u00e4\u00e4 aikaa lukea se kokonaisuudessaan, varsinkin jos pidit t\u00e4m\u00e4n postauksen kiinnostavana.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4m\u00e4 on vertailuviesti, mutta mielest\u00e4ni on hyv\u00e4 n\u00e4hd\u00e4, kuinka sama koodi voidaan kirjoittaa eri tavoin.<\/p>\n","protected":false},"author":1,"featured_media":236064,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,834,803],"tags":[1166],"class_list":["post-231328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opas-aloittelijoille","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231328"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231328\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}