{"id":230689,"date":"2022-12-18T13:13:00","date_gmt":"2022-12-18T10:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230689"},"modified":"2022-12-07T09:57:46","modified_gmt":"2022-12-07T06:57:46","slug":"pisanie-petli-w-php-dwa-sposoby-ta-sama-rzecz","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/pisanie-petli-w-php-dwa-sposoby-ta-sama-rzecz\/","title":{"rendered":"Pisanie p\u0119tli w PHP: dwa sposoby; Ta sama rzecz"},"content":{"rendered":"\n<p>Kiedy pracujesz z kolekcj\u0105 w PHP, przede wszystkim z tablicami w PHP, istniej\u0105 dwa sposoby, dzi\u0119ki kt\u00f3rym widzisz manipulowane informacje:<\/p>\n<ol>\n<li>przez <code>for<\/code>\u00a0p\u0119tle,<\/li>\n<li>poprzez r\u00f3\u017cne <code>array<\/code>\u00a0funkcje udost\u0119pniane przez PHP.<\/li>\n<\/ol>\n<p>Co jest warte, my\u015bl\u0119, \u017ce <code>array<\/code>\u00a0funkcje zapewniaj\u0105 wi\u0119ksz\u0105 czytelno\u015b\u0107, ale wykazano, \u017ce dzia\u0142aj\u0105 wolniej (zw\u0142aszcza w przypadku wi\u0119kszych danych \u2013 przy mniejszych danych naturalnie b\u0119dzie to pomijalne).<\/p>\n<p>Cz\u0119sto pracuj\u0119 z <code>for<\/code>p\u0119tlami i powi\u0105zanymi funkcjami, aby osi\u0105gn\u0105\u0107 to samo, ale pomy\u015bla\u0142em, \u017ce warto spojrze\u0107 na przyk\u0142ad z <a href=\"https:\/\/tommcfarlin.com\/tags-without-links-1-4-0\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">poprzedniego postu<\/a> i jak wykorzysta\u0142em <code>array<\/code>funkcje, aby osi\u0105gn\u0105\u0107 te same rzeczy, co <code>for<\/code>\u00a0p\u0119tla.<\/p>\n<p>Ostatecznie jest to post por\u00f3wnawczy, ale my\u015bl\u0119, \u017ce dobrze jest zobaczy\u0107, jak ten sam kod mo\u017cna napisa\u0107 na r\u00f3\u017cne sposoby.<\/p>\n<h2>Pisanie p\u0119tli w PHP<\/h2>\n<p>Na wst\u0119pie nie twierdz\u0119, co jest lepsze. Jest to po prostu pokazanie, jak pisanie p\u0119tli w PHP mo\u017cna osi\u0105gn\u0105\u0107 na wiele sposob\u00f3w.<\/p>\n<p>Od Ciebie zale\u017cy, jak chcesz to zaimplementowa\u0107.<\/p>\n<p>Celem tego przyk\u0142adu jest pokazanie:<\/p>\n<ul>\n<li>jak zdoby\u0107 tagi dla danego posta,<\/li>\n<li>przeczytaj ich nazwy jest tablic\u0105 rozdzielan\u0105 potoku,<\/li>\n<li>zwracaj\u0105 nazwy znacznik\u00f3w oddzielone potoku w formacie ci\u0105gu.<\/li>\n<\/ul>\n<p>A oto dwa sposoby, aby to zrobi\u0107.<\/p>\n<h3>Korzystanie ze standardowej p\u0119tli<\/h3>\n<p>U\u017cycie standardowej <code>for<\/code>\u00a0p\u0119tli mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/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>Zauwa\u017c, \u017ce ja:<\/p>\n<ol>\n<li>zainicjowa\u0107 ci\u0105g,<\/li>\n<li>przeczytaj tagi<\/li>\n<li>iterowa\u0107 przez nie i dodawa\u0107 je tylko wtedy, gdy jeszcze nie istniej\u0105,<\/li>\n<li>oddzieli\u0107 tablic\u0119 za pomoc\u0105 potoku,<\/li>\n<li>usu\u0144 wszelkie wlecz\u0105ce si\u0119 rury<\/li>\n<\/ol>\n<p>Nast\u0119pnie mam ci\u0105g, kt\u00f3ry mog\u0119 zwr\u00f3ci\u0107.<\/p>\n<h3>Korzystanie z funkcji tablicy<\/h3>\n<p>W tym przyk\u0142adzie robi\u0119 to samo, ale kod jest nieco bardziej zwarty:<\/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>Pomocne jest odczytanie kodu od najbardziej wewn\u0119trznej funkcji do najbardziej zewn\u0119trznej. Oto, co si\u0119 dzieje:<\/p>\n<ol>\n<li>Bior\u0119 tagi, iteruj\u0119 ka\u017cdy z nich za pomoc\u0105 anonimowej funkcji przekazanej do <code>array_map<\/code>,<\/li>\n<li>Nast\u0119pnie u\u017cywam zwr\u00f3conej tablicy i przekazuj\u0119 j\u0105, <code>array_filter<\/code>\u00a0aby duplikaty zosta\u0142y usuni\u0119te,<\/li>\n<li>Nast\u0119pnie przekszta\u0142cam tablic\u0119 w ci\u0105g rozdzielany potokami.<\/li>\n<\/ol>\n<p>Podobnie jak powy\u017cej, mam ci\u0105g, kt\u00f3ry mog\u0119 zwr\u00f3ci\u0107.<\/p>\n<h3>Ot\u00f3\u017c \u200b\u200bto?<\/h3>\n<p>Tak \u2013 i to wszystko. Nie m\u00f3wi\u0119, \u017ce czytelno\u015b\u0107 drugiej funkcji jest lepsza, ale powiem, \u017ce wymaga mniej krok\u00f3w.<\/p>\n<p>Pami\u0119taj te\u017c, \u017ce wi\u0119ksze zestawy danych mog\u0105 nie dzia\u0142a\u0107 tak dobrze.<\/p>\n<p>Niezale\u017cnie od tego, korzystanie z wbudowanych funkcji tablicowych jest naprawd\u0119 przyjemne, poniewa\u017c zapewnia poziom wbudowanej funkcjonalno\u015bci natywnej dla PHP (podczas gdy <code>for<\/code>\u00a0p\u0119tle s\u0105 bardziej powszechne we wszystkich j\u0119zykach), kt\u00f3re mog\u0105 nam zaoszcz\u0119dzi\u0107 czas (jak filtrowanie zduplikowanych danych).<\/p>\n<h2>Jakie\u015b referencje?<\/h2>\n<p>Aktualnie tak. Wydaje mi si\u0119, \u017ce opr\u00f3cz <a href=\"https:\/\/secure.php.net\/manual\/en\/ref.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">podr\u0119cznika PHP<\/a> <a href=\"https:\/\/carlalexander.ca\/php-array-functions-instead-loops\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Carl Alexander<\/a> ma prawdopodobnie najobszerniejszy artyku\u0142 na ten temat.<\/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=\"Pisanie p\u0119tli w PHP: dwa sposoby; Ta sama rzecz\" ><\/a><\/p>\n<p>Warto po\u015bwi\u0119ci\u0107 czas na przeczytanie go w ca\u0142o\u015bci, zw\u0142aszcza je\u015bli ten post by\u0142 dla Ciebie interesuj\u0105cy.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To jest post por\u00f3wnawczy, ale my\u015bl\u0119, \u017ce dobrze jest zobaczy\u0107, jak ten sam kod mo\u017cna napisa\u0107 na r\u00f3\u017cne sposoby.<\/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":[721,805,836],"tags":[1169],"class_list":["post-230689","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-php-7","category-przewodnik-dla-poczatkujacych","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230689"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230689\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}