{"id":230728,"date":"2022-12-03T19:35:00","date_gmt":"2022-12-03T16:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230728"},"modified":"2022-11-09T23:43:49","modified_gmt":"2022-11-09T20:43:49","slug":"jaa-merkkijonot-ja-kokonaisluvut-php-ssae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/jaa-merkkijonot-ja-kokonaisluvut-php-ssae\/","title":{"rendered":"Jaa merkkijonot ja kokonaisluvut PHP:ss\u00e4"},"content":{"rendered":"<p>Merkkijonojen, numeroiden ja s\u00e4\u00e4nn\u00f6llisten lausekkeiden k\u00e4ytt\u00e4minen PHP:ss\u00e4 on suhteellisen helppoa ottaen huomioon kielen tarjoamat suuret toiminnot.<\/p>\n<p>Joskus on kuitenkin aikoja, jolloin tiettyjen kriteerien jakamisen selvitt\u00e4minen ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole heti selv\u00e4\u00e4, tai voi olla selv\u00e4\u00e4, mit\u00e4 sinun tulee tehd\u00e4, mutta ei sit\u00e4, miten se tehd\u00e4\u00e4n parhaiten.<\/p>\n<p>Kuva: Ag\u00ea Barros Unsplashista<\/p>\n<p>Oletetaan esimerkiksi, ett\u00e4 sinulla on merkkijono, jossa on sek\u00e4 numeroita ett\u00e4 numeroita. Oletetaan t\u00e4t\u00e4 viesti\u00e4 varten, ett\u00e4 tietty merkkijono:<\/p>\n<ul>\n<li>sis\u00e4lt\u00e4\u00e4 tunnit ja minuutit,<\/li>\n<li>kun minuutit ovat 60,<\/li>\n<li>merkkijonon tulee lis\u00e4t\u00e4 tuntien arvoa yhdell\u00e4<\/li>\n<li>minuuttien arvo nollataan.<\/li>\n<\/ul>\n<p>Esimerkki ongelmallisesta merkkijonosta voi siis olla muotoa T3H60M. Kuinka sitten voisimme jakaa merkkijonon merkkijonoiksi ja kokonaisluvuiksi ja rakentaa sen oikein uudelleen?<\/p>\n<p>T\u00e4ss\u00e4 tapauksessa olen kokenut hy\u00f6dyllisiksi kolme asiaa. Ei tietyss\u00e4 j\u00e4rjestyksess\u00e4:<\/p>\n<ul>\n<li>s\u00e4\u00e4nn\u00f6llinen lauseke<\/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\">taulukon_arvot<\/a><\/li>\n<\/ul>\n<p>Ja j\u00e4rjestys, jossa kunkin yll\u00e4 olevan k\u00e4ytt\u00f6toiminnot ovat suunnilleen seuraava:<\/p>\n<ol>\n<li>k\u00e4yt\u00e4 s\u00e4\u00e4nn\u00f6llist\u00e4 lauseketta l\u00f6yt\u00e4\u00e4ksesi kaikki merkkijonon numerot,<\/li>\n<li>poista kaikki paitsi taulukon numerot<\/li>\n<li>jos toinen numero on 60, aseta se nollaksi<\/li>\n<li>lis\u00e4\u00e4 taulukon ensimm\u00e4ist\u00e4 indeksi\u00e4 yhdell\u00e4<\/li>\n<li>rakentaa merkkijono uudelleen.<\/li>\n<\/ol>\n<p>Jos yll\u00e4 olevat vaiheet muunnetaan koodiksi, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12#file-00-format-time-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se voisi n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/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>Huomaa, ett\u00e4 p\u00e4\u00e4t\u00e4n k\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a> -komentoa poistaakseni p\u00e4\u00e4llekk\u00e4isi\u00e4 arvoja ja k\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a> -funktiota taulukon puhdistamiseen kahdeksi merkinn\u00e4ksi, joista ensimm\u00e4inen on tunti ja toinen minuutti.<\/p>\n<p>Sen j\u00e4lkeen m\u00e4\u00e4rit\u00e4n taulukon jokaisen indeksin arvon (ja muista, ett\u00e4 ne ovat merkkijonoja, joten sinun on annettava ne kokonaislukuina, jotta niiden arvo kasvaa kunnolla.<\/p>\n<p>Lopuksi rakennan merkkijonon tarpeen mukaan (ja tarvittaessa).<\/p>\n<p>Toki t\u00e4m\u00e4 on v\u00e4h\u00e4n niche-tapaus, mutta ratkaisua voi yleist\u00e4\u00e4 omien tarpeidesi perusteella.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>K\u00e4ytt\u00e4m\u00e4ll\u00e4 preg_split ja muutamia alkuper\u00e4isi\u00e4 PHP-toimintoja jakamaan helposti merkkijonoja ja kokonaislukuja PHP:ss\u00e4 s\u00e4\u00e4nn\u00f6llisten lausekkeiden avulla.<\/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":[719,895,843,803],"tags":[1166],"class_list":["post-230728","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230728"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230728\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}