{"id":230729,"date":"2022-12-18T12:59:00","date_gmt":"2022-12-18T09:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230729"},"modified":"2022-12-07T09:57:49","modified_gmt":"2022-12-07T06:57:49","slug":"skriva-loopar-i-php-tvaa-saett-samma-sak","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/skriva-loopar-i-php-tvaa-saett-samma-sak\/","title":{"rendered":"Skriva loopar i PHP: Tv\u00e5 s\u00e4tt; Samma sak"},"content":{"rendered":"\n<p>N\u00e4r du arbetar med en samling i PHP, framf\u00f6r allt arrayer i PHP, finns det tv\u00e5 s\u00e4tt p\u00e5 vilka du i f\u00f6rsta hand ser informationen manipulerad:<\/p>\n<ol>\n<li>genom <code>for<\/code>\u00a0slingor,<\/li>\n<li>genom en m\u00e4ngd olika <code>array<\/code>\u00a0funktioner som PHP tillhandah\u00e5ller.<\/li>\n<\/ol>\n<p>F\u00f6r vad det \u00e4r v\u00e4rt tror jag att <code>array<\/code>\u00a0funktionerna ger st\u00f6rre l\u00e4sbarhet men de har visat sig vara l\u00e5ngsammare (s\u00e4rskilt med st\u00f6rre data \u2013 med mindre data kommer det naturligtvis att vara f\u00f6rsumbart).<\/p>\n<p>Jag jobbar ofta med <code>for<\/code>loopar och relaterade funktioner f\u00f6r att uppn\u00e5 samma sak men jag t\u00e4nkte att det kan vara v\u00e4rt att titta p\u00e5 ett exempel fr\u00e5n <a href=\"https:\/\/tommcfarlin.com\/tags-without-links-1-4-0\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6rra inl\u00e4gget<\/a> och hur jag anv\u00e4nde <code>array<\/code>funktionerna f\u00f6r att uppn\u00e5 samma saker som en <code>for<\/code>\u00a0loop.<\/p>\n<p>I slut\u00e4ndan \u00e4r detta ett j\u00e4mf\u00f6relseinl\u00e4gg men jag tycker att det \u00e4r bra att se hur samma kod kan skrivas p\u00e5 olika s\u00e4tt.<\/p>\n<h2>Skriva loopar i PHP<\/h2>\n<p>Fr\u00e5n b\u00f6rjan g\u00f6r jag inget p\u00e5st\u00e5ende om vilket som \u00e4r b\u00e4ttre. Detta \u00e4r helt enkelt f\u00f6r att visa hur skrivslingor i PHP kan uppn\u00e5s p\u00e5 flera s\u00e4tt.<\/p>\n<p>Det \u00e4r upp till dig hur du vill implementera det.<\/p>\n<p>M\u00e5let med detta exempel \u00e4r att visa:<\/p>\n<ul>\n<li>hur man f\u00e5r taggar f\u00f6r ett givet inl\u00e4gg,<\/li>\n<li>l\u00e4s deras namn \u00e4r en r\u00f6ravgr\u00e4nsad array,<\/li>\n<li>returnera taggnamnen \u00e5tskilda av r\u00f6ret i ett str\u00e4ngformat.<\/li>\n<\/ul>\n<p>Och h\u00e4r \u00e4r de tv\u00e5 s\u00e4tten att g\u00f6ra det.<\/p>\n<h3>Anv\u00e4nda en standardslinga<\/h3>\n<p>Att anv\u00e4nda en standardslinga <code>for<\/code>\u00a0kan se ut s\u00e5 h\u00e4r:<\/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>L\u00e4gg m\u00e4rke till att jag:<\/p>\n<ol>\n<li>initiera en str\u00e4ng,<\/li>\n<li>l\u00e4s taggarna<\/li>\n<li>iterera igenom dem och l\u00e4gg till dem bara om de inte redan finns,<\/li>\n<li>separera arrayen med ett r\u00f6r,<\/li>\n<li>ta bort eventuella sl\u00e4pr\u00f6r<\/li>\n<\/ol>\n<p>D\u00e5 har jag sn\u00f6ret jag kan l\u00e4mna tillbaka.<\/p>\n<h3>Anv\u00e4nda Array-funktioner<\/h3>\n<p>I det h\u00e4r exemplet g\u00f6r jag samma sak men koden \u00e4r lite mer kompakt:<\/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>Det \u00e4r bra att l\u00e4sa koden fr\u00e5n den innersta funktionen till den yttersta. Med det, h\u00e4r \u00e4r vad som h\u00e4nder:<\/p>\n<ol>\n<li>Jag tar taggarna, itererar genom var och en av dem med en anonym funktion som skickas till <code>array_map<\/code>,<\/li>\n<li>Jag anv\u00e4nder sedan den returnerade arrayen och skickar den till <code>array_filter<\/code>\u00a0s\u00e5 att dubbletter tas bort,<\/li>\n<li>Sedan konverterar jag arrayen till en r\u00f6ravgr\u00e4nsad str\u00e4ng.<\/li>\n<\/ol>\n<p>Ungef\u00e4r som ovan har jag sn\u00f6ret jag kan l\u00e4mna tillbaka.<\/p>\n<h3>Det \u00e4r allt?<\/h3>\n<p>Japp \u2013 och det \u00e4r det. Jag s\u00e4ger inte att l\u00e4sbarheten f\u00f6r den andra funktionen \u00e4r b\u00e4ttre men jag kommer att s\u00e4ga att den kr\u00e4ver f\u00e4rre steg.<\/p>\n<p>Kom ocks\u00e5 ih\u00e5g att st\u00f6rre datam\u00e4ngder kanske inte fungerar lika bra.<\/p>\n<p>Oavsett vilket \u00e4r det riktigt trevligt att anv\u00e4nda inbyggda array-funktioner eftersom det ger en niv\u00e5 av inbyggd funktionalitet som \u00e4r inbyggd i PHP (medan <code>for<\/code>\u00a0loopar \u00e4r vanligare p\u00e5 alla spr\u00e5k) som kan spara tid (som att filtrera bort dubbletter av data).<\/p>\n<h2>N\u00e5gra referenser?<\/h2>\n<p>Faktiskt ja. Bortsett fr\u00e5n <a href=\"https:\/\/secure.php.net\/manual\/en\/ref.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP-manualen<\/a> tror jag att <a href=\"https:\/\/carlalexander.ca\/php-array-functions-instead-loops\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Carl Alexander<\/a> utan tvekan har den mest omfattande artikeln om detta \u00e4mne.<\/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=\"Skriva loopar i PHP: Tv\u00e5 s\u00e4tt; Samma sak\" ><\/a><\/p>\n<p>Det \u00e4r v\u00e4l v\u00e4rt din tid att l\u00e4sa den i sin helhet, s\u00e4rskilt om du tyckte att det h\u00e4r inl\u00e4gget var intressant.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det h\u00e4r \u00e4r ett j\u00e4mf\u00f6relseinl\u00e4gg men jag tycker att det \u00e4r bra att se hur samma kod kan skrivas p\u00e5 olika s\u00e4tt.<\/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":[838,807,724],"tags":[1173],"class_list":["post-230729","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230729"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230729\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}