{"id":231321,"date":"2022-12-18T13:02:00","date_gmt":"2022-12-18T10:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231321"},"modified":"2022-12-07T09:57:48","modified_gmt":"2022-12-07T06:57:48","slug":"escrevendo-loops-em-php-duas-maneiras-mesma-coisa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/escrevendo-loops-em-php-duas-maneiras-mesma-coisa\/","title":{"rendered":"Escrevendo Loops em PHP: Duas Maneiras; Mesma coisa"},"content":{"rendered":"\n<p>Quando voc\u00ea est\u00e1 trabalhando com uma cole\u00e7\u00e3o em PHP, mais notavelmente, arrays em PHP, existem duas maneiras pelas quais voc\u00ea v\u00ea principalmente as informa\u00e7\u00f5es manipuladas:<\/p>\n<ol>\n<li>atrav\u00e9s <code>for<\/code>\u00a0de la\u00e7os,<\/li>\n<li>atrav\u00e9s de uma variedade de <code>array<\/code>\u00a0fun\u00e7\u00f5es que o PHP fornece.<\/li>\n<\/ol>\n<p>Para o que vale a pena, acho que as <code>array<\/code>\u00a0fun\u00e7\u00f5es fornecem maior legibilidade, mas se mostraram mais lentas (especialmente com dados maiores \u2013 com dados menores, naturalmente ser\u00e1 insignificante).<\/p>\n<p>Costumo trabalhar com <code>for<\/code>loops e fun\u00e7\u00f5es relacionadas para conseguir a mesma coisa, mas achei que valeria a pena dar uma olhada em um exemplo do <a href=\"https:\/\/tommcfarlin.com\/tags-without-links-1-4-0\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post anterior<\/a> e como usei as <code>array<\/code>fun\u00e7\u00f5es para obter as mesmas coisas que um <code>for<\/code>\u00a0loop.<\/p>\n<p>Em \u00faltima an\u00e1lise, este \u00e9 um post de compara\u00e7\u00e3o, mas acho que \u00e9 bom ver como o mesmo c\u00f3digo pode ser escrito de maneiras diferentes.<\/p>\n<h2>Escrevendo Loops em PHP<\/h2>\n<p>Desde o in\u00edcio, n\u00e3o estou fazendo uma afirma\u00e7\u00e3o sobre o que \u00e9 melhor. Isto \u00e9 simplesmente para mostrar como escrever loops em PHP pode ser feito de v\u00e1rias maneiras.<\/p>\n<p>Cabe a voc\u00ea como voc\u00ea deseja implement\u00e1-lo.<\/p>\n<p>O objetivo deste exemplo \u00e9 mostrar:<\/p>\n<ul>\n<li>como obter as tags para uma determinada postagem,<\/li>\n<li>leia seus nomes \u00e9 uma matriz delimitada por pipe,<\/li>\n<li>retorne os nomes de tags separados por barra vertical em um formato de string.<\/li>\n<\/ul>\n<p>E aqui est\u00e3o as duas maneiras de fazer isso.<\/p>\n<h3>Usando um loop padr\u00e3o<\/h3>\n<p>Usar um <code>for<\/code>\u00a0loop padr\u00e3o pode ser algo assim:<\/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>Observe que eu:<\/p>\n<ol>\n<li>inicializar uma string,<\/li>\n<li>leia as etiquetas<\/li>\n<li>iterar por eles e adicion\u00e1-los apenas se eles ainda n\u00e3o existirem,<\/li>\n<li>separe o array usando um pipe,<\/li>\n<li>remova quaisquer tubos \u00e0 direita<\/li>\n<\/ol>\n<p>Ent\u00e3o eu tenho a string que posso retornar.<\/p>\n<h3>Usando fun\u00e7\u00f5es de matriz<\/h3>\n<p>Neste exemplo, estou fazendo a mesma coisa, mas o c\u00f3digo \u00e9 um pouco mais compacto:<\/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>\u00c9 \u00fatil ler o c\u00f3digo da fun\u00e7\u00e3o mais interna para a mais externa. Com isso, eis o que est\u00e1 acontecendo:<\/p>\n<ol>\n<li>Estou pegando as tags, iterando cada uma delas usando uma fun\u00e7\u00e3o an\u00f4nima passada para <code>array_map<\/code>,<\/li>\n<li>Eu ent\u00e3o uso a matriz retornada e a passo para <code>array_filter<\/code>\u00a0que as duplicatas sejam removidas,<\/li>\n<li>Ent\u00e3o eu converto o array em uma string delimitada por pipe.<\/li>\n<\/ol>\n<p>Assim como acima, eu tenho a string que posso retornar.<\/p>\n<h3>\u00c9 isso?<\/h3>\n<p>Sim &#8211; e \u00e9 isso. N\u00e3o estou dizendo que a legibilidade da segunda fun\u00e7\u00e3o seja melhor, mas direi que requer menos etapas.<\/p>\n<p>Lembre-se tamb\u00e9m de que conjuntos de dados maiores podem n\u00e3o ter um desempenho t\u00e3o bom.<\/p>\n<p>Independentemente disso, usar fun\u00e7\u00f5es de array integradas \u00e9 muito bom porque fornece um n\u00edvel de funcionalidade integrada nativa do PHP (enquanto <code>for<\/code>\u00a0os loops s\u00e3o mais comuns em todas as linguagens) que podem nos poupar tempo (como filtrar dados duplicados).<\/p>\n<h2>Alguma Refer\u00eancia?<\/h2>\n<p>Na verdade sim. Al\u00e9m do <a href=\"https:\/\/secure.php.net\/manual\/en\/ref.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manual do PHP<\/a>, acho que <a href=\"https:\/\/carlalexander.ca\/php-array-functions-instead-loops\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Carl Alexander<\/a> tem, sem d\u00favida, o artigo mais abrangente sobre este t\u00f3pico.<\/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=\"Escrevendo Loops em PHP: Duas Maneiras; Mesma coisa\" ><\/a><\/p>\n<p>Vale a pena ler na \u00edntegra, especialmente se voc\u00ea achou este post em particular interessante.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este \u00e9 um post de compara\u00e7\u00e3o, mas acho que \u00e9 bom ver como o mesmo c\u00f3digo pode ser escrito de maneiras diferentes.<\/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":[722,837,806],"tags":[1170],"class_list":["post-231321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231321"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231321\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}