{"id":230869,"date":"2022-12-03T19:04:00","date_gmt":"2022-12-03T16:04:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230869"},"modified":"2022-11-10T00:22:26","modified_gmt":"2022-11-09T21:22:26","slug":"dividi-stringhe-e-numeri-interi-in-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/dividi-stringhe-e-numeri-interi-in-php\/","title":{"rendered":"Dividi stringhe e numeri interi in PHP"},"content":{"rendered":"<p>Lavorare con stringhe, numeri ed espressioni regolari in PHP \u00e8 relativamente facile dato il vasto numero di funzioni fornite dal linguaggio.<\/p>\n<p>Ci sono momenti, tuttavia, in cui capire come dividere in base a determinati criteri potrebbe non essere immediatamente chiaro, oppure potrebbe essere chiaro cosa devi fare ma non come farlo al meglio.<\/p>\n<p>Foto di Ag\u00ea Barros su Unsplash<\/p>\n<p>Ad esempio, supponiamo di avere una stringa mescolata con numeri e cifre. Per questo post, diciamo che una determinata stringa:<\/p>\n<ul>\n<li>include ore e minuti,<\/li>\n<li>quando i minuti sono a 60,<\/li>\n<li>la stringa dovrebbe aumentare di uno il valore delle ore<\/li>\n<li>il valore dei minuti viene azzerato.<\/li>\n<\/ul>\n<p>Un esempio, stringa problematica, quindi, potrebbe essere della forma T3H60M. Come potremmo allora dividere la stringa in stringhe e numeri interi e ricostruirla correttamente?<\/p>\n<p>In questo caso, ci sono tre cose che ho trovato utili. Senza un ordine particolare:<\/p>\n<ul>\n<li>un&#8217;espressione regolare<\/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\">filtro_array<\/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\">valori_array<\/a><\/li>\n<\/ul>\n<p>E l&#8217;ordine in cui le operazioni di utilizzo di ciascuna delle precedenti vanno in questo modo:<\/p>\n<ol>\n<li>usa un&#8217;espressione regolare per trovare tutte le cifre nella stringa,<\/li>\n<li>rimuovere tutto tranne le cifre nell&#8217;array<\/li>\n<li>se la seconda cifra \u00e8 60, impostala uguale a zero<\/li>\n<li>aumentare di uno il primo indice dell&#8217;array<\/li>\n<li>ricostruire la stringa.<\/li>\n<\/ol>\n<p>Se i passaggi precedenti fossero stati convertiti in codice, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12#file-00-format-time-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo potrebbe essere come sarebbe:<\/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>Si noti che ho scelto di utilizzare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a> per rimuovere i valori duplicati e utilizzare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a> \u200b\u200bper ripulire l&#8217;array in solo due voci, la prima delle quali \u00e8 l&#8217;ora, la seconda delle quali \u00e8 il minuto.<\/p>\n<p>Successivamente, determino il valore di ciascuno degli indici dell&#8217;array (e ricorda, sono stringhe, quindi dovrai eseguirne il cast come interi per aumentare correttamente il loro valore.<\/p>\n<p>Infine, costruisco la stringa come (e se) necessario.<\/p>\n<p>Certo, questo \u00e8 un caso un po&#8217; di nicchia, ma la soluzione pu\u00f2 essere pi\u00f9 generalizzata in base alle proprie esigenze.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Utilizzo di preg_split e alcune funzioni PHP native per dividere facilmente stringhe e interi in PHP usando espressioni regolari.<\/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":[896,804,720,844],"tags":[1168],"class_list":["post-230869","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230869","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230869"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230869\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}