{"id":230314,"date":"2022-12-03T19:43:00","date_gmt":"2022-12-03T16:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230314"},"modified":"2022-11-09T21:05:07","modified_gmt":"2022-11-09T18:05:07","slug":"dividir-cadenas-y-enteros-en-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/dividir-cadenas-y-enteros-en-php\/","title":{"rendered":"Dividir cadenas y enteros en PHP"},"content":{"rendered":"<p>Trabajar con cadenas, n\u00fameros y expresiones regulares en PHP es relativamente f\u00e1cil dada la gran cantidad de funciones que proporciona el lenguaje.<\/p>\n<p>Sin embargo, hay momentos en los que descubrir c\u00f3mo dividir seg\u00fan ciertos criterios puede no ser claro de inmediato, o puede ser claro lo que debe hacer, pero no la mejor manera de hacerlo.<\/p>\n<p>Foto de Ag\u00ea Barros en Unsplash<\/p>\n<p>Por ejemplo, supongamos que tiene una cadena que se mezcla con n\u00fameros y d\u00edgitos. Para esta publicaci\u00f3n, digamos que una cadena dada:<\/p>\n<ul>\n<li>incluye horas y minutos,<\/li>\n<li>cuando los minutos est\u00e1n en 60,<\/li>\n<li>la cadena debe aumentar el valor de las horas en uno<\/li>\n<li>el valor de los minutos se pone a cero.<\/li>\n<\/ul>\n<p>Un ejemplo, una cadena problem\u00e1tica, entonces, puede ser de la forma T3H60M. Entonces, \u00bfc\u00f3mo podr\u00edamos dividir la cadena en cadenas y enteros y reconstruirla adecuadamente?<\/p>\n<p>En este caso, hay tres cosas que he encontrado \u00fatiles. Sin ning\u00fan orden en particular:<\/p>\n<ul>\n<li>una expresi\u00f3n 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\">embarazo_dividido<\/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\">matriz_filtro<\/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>Y el orden en que las operaciones de usar cada uno de los anteriores es algo como esto:<\/p>\n<ol>\n<li>use una expresi\u00f3n regular para encontrar todos los d\u00edgitos en la cadena,<\/li>\n<li>eliminar todo excepto los d\u00edgitos en la matriz<\/li>\n<li>si el segundo d\u00edgito es 60, config\u00farelo igual a cero<\/li>\n<li>aumentar el primer \u00edndice de la matriz en uno<\/li>\n<li>reconstruir la cadena.<\/li>\n<\/ol>\n<p>Si los pasos anteriores se convirtieran en 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\">este podr\u00eda ser el aspecto que tendr\u00eda:<\/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>Tenga en cuenta 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 eliminar valores duplicados y uso <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a> \u200b\u200bpara limpiar la matriz en solo dos entradas, la primera de las cuales es la hora, la segunda es el minuto.<\/p>\n<p>Despu\u00e9s de eso, determino el valor de cada uno de los \u00edndices de la matriz (y recuerde, son cadenas, por lo que tendr\u00e1 que convertirlas en n\u00fameros enteros para aumentar su valor de manera adecuada.<\/p>\n<p>Finalmente, construyo la cadena como (y si) es necesario.<\/p>\n<p>Claro, este es un caso un poco especializado, pero la soluci\u00f3n puede ser m\u00e1s generalizada en funci\u00f3n de sus propias necesidades.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <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 y algunas funciones nativas de PHP para dividir f\u00e1cilmente cadenas y n\u00fameros enteros en PHP usando expresiones 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":[892,716,800,840],"tags":[1172],"class_list":["post-230314","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230314"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230314\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}