{"id":284,"date":"2021-08-11T03:44:13","date_gmt":"2021-08-11T03:44:13","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=284"},"modified":"2021-08-11T04:04:29","modified_gmt":"2021-08-11T04:04:29","slug":"php-array-combinando-a-dupla-key-value-como-string","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/08\/11\/php-array-combinando-a-dupla-key-value-como-string\/","title":{"rendered":"PHP Array Combinando a Dupla Key Value como String"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>function getArgsAsString(array $args): string {\n    return implode(', ', array_map(static function($v, $k){ return $k.'='.$v; }, $args, array_keys($args)));\n}<\/code><\/pre>\n\n\n\n<p>Oxx\u00ea! At\u00e9 o t\u00edtulo deste artigo ficou estranho, mas primeiro vou explicar onde eu precisei usar isso pra ver se facilita o entendimento do porqu\u00ea esse c\u00f3digo pode ser \u00fatil pra voc\u00ea.<\/p>\n\n\n\n<p>Quando escrevemos queries SQL em PHP \u00e9 bastante comum fazermos o bind dos argumentos por nome associativo ao inv\u00e9s de posi\u00e7\u00e3o. Essa t\u00e9cnica facilita n\u00e3o s\u00f3 a legibilidade do c\u00f3digo como tamb\u00e9m ajuda a manter um c\u00f3digo limpo e enxuto.<\/p>\n\n\n\n<p>Pois bem, em um dado momento eu me recordo que precisei registrar um log da opera\u00e7\u00e3o de SQL, da\u00ed al\u00e9m de registrar a string contendo a Query Statement, precisei tamb\u00e9m salvar os argumentos utilizados na opera\u00e7\u00e3o. Foi neste momento que me dei conta de que o PHP n\u00e3o fornece uma solu\u00e7\u00e3o nativa para este caso.<\/p>\n\n\n\n<p>Rapidamente pensei nas fun\u00e7\u00f5es nativas de parsing de Array do PHP, ent\u00e3o o  array_map caiu como uma luva. Lembrando que o array_map despreza os \u00edndices associativos do array original produzindo um novo array com \u00edndices sequenciais, mas como meu objetivo era produzir uma string com a combina\u00e7\u00e3o KEY=VALUE, eu n\u00e3o tive problemas com este fato.<\/p>\n\n\n\n<p>Por\u00e9m, \u00e9 poss\u00edvel fazermos a mesma opera\u00e7\u00e3o preservando os \u00edndices associativos originais do array, para isto basta usar a sintaxe abaixo com o comando array_walk.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array_walk($mapped_row, function(&amp;$value, $key) {\n    $value = sprintf('%s=%s', $value, $key);\n}); \n\n$args_string = implode(', ', $args);<\/code><\/pre>\n\n\n\n<p>Lembrando que array_walk atua sobre o array original modificando o mesmo, diferentemente do array_map que produz um array completamente novo. Se voc\u00ea tiver problemas em modificar o seu array original crie ent\u00e3o uma fun\u00e7\u00e3o passando o array como par\u00e2metro.<\/p>\n\n\n\n<p>Diferentemente de Objetos, os Arrays n\u00e3o s\u00e3o passados por refer\u00eancia por default, assim uma nova array ser\u00e1 criada antes do parsing do array_walk, o que ir\u00e1 preservar o array original intacto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function getArgsAsString(array $args): string {\n    array_walk($args, function(&amp;$value, $key) {\n        $value = sprintf('%s=%s', $value, $key);\n    });\n    \n    return implode(', ', $args);\n}<\/code><\/pre>\n\n\n\n<p>Bom, fora este detalhe voc\u00ea pode ficar a vontade para utilizar a sintaxe que preferir&#8230; aproveite!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oxx\u00ea! At\u00e9 o t\u00edtulo deste artigo ficou estranho, mas primeiro vou explicar onde eu precisei usar isso pra ver se facilita o entendimento do porqu\u00ea esse c\u00f3digo pode ser \u00fatil pra voc\u00ea. Quando escrevemos queries SQL em PHP \u00e9 bastante comum fazermos o bind dos argumentos por nome associativo ao inv\u00e9s de posi\u00e7\u00e3o. Essa t\u00e9cnica [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,2,3],"tags":[63,143,84],"class_list":["post-284","post","type-post","status-publish","format-standard","hentry","category-backend","category-coding","category-php","tag-array","tag-array_map","tag-array_walk"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=284"}],"version-history":[{"count":3,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":289,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/284\/revisions\/289"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}