{"id":230712,"date":"2022-12-03T19:00:00","date_gmt":"2022-12-03T16:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230712"},"modified":"2022-11-09T23:39:10","modified_gmt":"2022-11-09T20:39:10","slug":"dividir-strings-e-inteiros-em-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/dividir-strings-e-inteiros-em-php\/","title":{"rendered":"Dividir strings e inteiros em PHP"},"content":{"rendered":"<p>Trabalhar com strings, n\u00fameros e express\u00f5es regulares em PHP \u00e9 relativamente f\u00e1cil, dado o grande n\u00famero de fun\u00e7\u00f5es que a linguagem oferece.<\/p>\n<p>H\u00e1 momentos, por\u00e9m, em que descobrir como dividir em determinados crit\u00e9rios pode n\u00e3o ser imediatamente claro, ou pode ser claro o que voc\u00ea precisa fazer, mas n\u00e3o a melhor forma de faz\u00ea-lo.<\/p>\n<p>Foto de Ag\u00ea Barros no Unsplash<\/p>\n<p>Por exemplo, digamos que voc\u00ea tenha uma string misturada com n\u00fameros e d\u00edgitos. Para este post, digamos que uma determinada string:<\/p>\n<ul>\n<li>inclui horas e minutos,<\/li>\n<li>quando os minutos est\u00e3o em 60,<\/li>\n<li>a string deve aumentar o valor do das horas em um<\/li>\n<li>o valor dos minutos \u00e9 zerado.<\/li>\n<\/ul>\n<p>Um exemplo de string problem\u00e1tica, ent\u00e3o, pode ser da forma T3H60M. Como ent\u00e3o podemos dividir a string em strings e inteiros e reconstru\u00ed-la adequadamente?<\/p>\n<p>Neste caso, h\u00e1 tr\u00eas coisas que considero \u00fateis. Em nenhuma ordem particular:<\/p>\n<ul>\n<li>uma express\u00e3o regular<\/li>\n<li><a href=\"https:\/\/secure.php.net\/manual\/en\/function.preg-split.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_split<\/a><\/li>\n<li><a href=\"https:\/\/secure.php.net\/manual\/en\/function.array-filter.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a><\/li>\n<li><a href=\"https:\/\/secure.php.net\/manual\/en\/function.array-values.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">valores_array<\/a><\/li>\n<\/ul>\n<p>E a ordem em que as opera\u00e7\u00f5es de uso de cada um dos itens acima s\u00e3o mais ou menos assim:<\/p>\n<ol>\n<li>use uma express\u00e3o regular para encontrar todos os d\u00edgitos na string,<\/li>\n<li>remova tudo, exceto os d\u00edgitos na matriz<\/li>\n<li>se o segundo d\u00edgito for 60, defina-o igual a zero<\/li>\n<li>aumentar o primeiro \u00edndice do array em um<\/li>\n<li>reconstruir a corda.<\/li>\n<\/ol>\n<p>Se as etapas acima foram convertidas em c\u00f3digo, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12#file-00-format-time-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pode ser assim:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n$totalTimeParts = array_values(\n  array_filter(\n    preg_split(\"\/(&lt;=[0-9])*([a-zA-Z])\/i\", $totalTime)) );\n\nif (isset($totalTimeParts[0]) &amp;&amp; isset($totalTimeParts[1]) &amp;&amp; '60' === $totalTimeParts[1]) {\n  $hours = (int)$totalTimeParts[0] + 1;\n  $minutes = '00';\n  $totalTime = \"P$hours\". 'H'. $minutes. 'M';\n}\n\nreturn $totalTime;<\/code><\/pre>\n<p>Observe que opto por usar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a> para remover valores duplicados e usar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a> \u200b\u200bpara limpar a matriz em apenas duas entradas, sendo a primeira a hora e a segunda o minuto.<\/p>\n<p>Depois disso, determino o valor de cada um dos \u00edndices do array (e lembre-se, eles s\u00e3o strings, ent\u00e3o voc\u00ea ter\u00e1 que convert\u00ea-los como inteiros para aumentar adequadamente seu valor.<\/p>\n<p>Finalmente, eu construo a string conforme (e se) necess\u00e1rio.<\/p>\n<p>Claro, este \u00e9 um caso um pouco de nicho, mas a solu\u00e7\u00e3o pode ser mais generalizada com base em suas pr\u00f3prias necessidades.<\/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>Usando preg_split e algumas fun\u00e7\u00f5es nativas do PHP para dividir facilmente strings e inteiros em PHP usando express\u00f5es regulares.<\/p>\n","protected":false},"author":1,"featured_media":163201,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,806,846],"tags":[1170],"class_list":["post-230712","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230712","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=230712"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230712\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}