{"id":230139,"date":"2022-12-03T19:34:00","date_gmt":"2022-12-03T16:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230139"},"modified":"2022-11-09T20:16:20","modified_gmt":"2022-11-09T17:16:20","slug":"dela-straengar-och-heltal-i-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/dela-straengar-och-heltal-i-php\/","title":{"rendered":"Dela str\u00e4ngar och heltal i PHP"},"content":{"rendered":"<p>Att arbeta med str\u00e4ngar, siffror och regulj\u00e4ra uttryck i PHP \u00e4r relativt enkelt med tanke p\u00e5 det stora antalet funktioner som spr\u00e5ket tillhandah\u00e5ller.<\/p>\n<p>Det finns dock tillf\u00e4llen d\u00e5 det kanske inte \u00e4r omedelbart tydligt att ta reda p\u00e5 hur man delar p\u00e5 vissa kriterier, eller det kan vara tydligt vad du beh\u00f6ver g\u00f6ra men inte hur du b\u00e4st g\u00f6r det.<\/p>\n<p>Foto av Ag\u00ea Barros p\u00e5 Unsplash<\/p>\n<p>L\u00e5t oss till exempel s\u00e4ga att du har en str\u00e4ng som \u00e4r blandad med b\u00e5de siffror och siffror. F\u00f6r det h\u00e4r inl\u00e4gget, l\u00e5t oss s\u00e4ga att en given str\u00e4ng:<\/p>\n<ul>\n<li>inkluderar timmar och minuter,<\/li>\n<li>n\u00e4r minuterna \u00e4r p\u00e5 60,<\/li>\n<li>str\u00e4ngen b\u00f6r \u00f6ka v\u00e4rdet p\u00e5 timmarna med en<\/li>\n<li>v\u00e4rdet p\u00e5 minuterna nollst\u00e4lls.<\/li>\n<\/ul>\n<p>Ett exempel p\u00e5 en problematisk str\u00e4ng kan d\u00e5 vara av formen T3H60M. Hur kan vi d\u00e5 dela upp str\u00e4ngen i str\u00e4ngar och heltal och \u00e5teruppbygga den ordentligt?<\/p>\n<p>I det h\u00e4r fallet \u00e4r det tre saker som jag har funnit anv\u00e4ndbara. I ingen best\u00e4md ordning:<\/p>\n<ul>\n<li>ett regulj\u00e4rt uttryck<\/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\">array_values<\/a><\/li>\n<\/ul>\n<p>Och ordningen i vilken operationerna f\u00f6r att anv\u00e4nda vart och ett av ovanst\u00e5ende g\u00e5r ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>anv\u00e4nd ett regulj\u00e4rt uttryck f\u00f6r att hitta alla siffror i str\u00e4ngen,<\/li>\n<li>ta bort allt utom siffrorna i arrayen<\/li>\n<li>om den andra siffran \u00e4r 60, s\u00e4tt den lika med noll<\/li>\n<li>\u00f6ka det f\u00f6rsta indexet i arrayen med ett<\/li>\n<li>bygga om str\u00e4ngen.<\/li>\n<\/ol>\n<p>Om stegen ovan konverterades till kod <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12#file-00-format-time-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kan det vara s\u00e5 h\u00e4r det skulle se ut:<\/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>Observera att jag v\u00e4ljer att anv\u00e4nda <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a> f\u00f6r att ta bort dubbletter av v\u00e4rden och anv\u00e4nda <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a> \u200b\u200bf\u00f6r att rensa upp arrayen till bara tv\u00e5 poster, varav den f\u00f6rsta \u00e4r timmen, den andra \u00e4r minuten.<\/p>\n<p>Efter det best\u00e4mmer jag v\u00e4rdet p\u00e5 vart och ett av indexen i arrayen (och kom ih\u00e5g att de \u00e4r str\u00e4ngar s\u00e5 du m\u00e5ste kasta dem som heltal f\u00f6r att \u00f6ka deras v\u00e4rde.<\/p>\n<p>Slutligen bygger jag str\u00e4ngen som (och om) beh\u00f6vs.<\/p>\n<p>Visst, det h\u00e4r \u00e4r lite av ett nischfall, men l\u00f6sningen kan vara mer generaliserad utifr\u00e5n dina egna behov.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Anv\u00e4nder preg_split och n\u00e5gra inbyggda PHP-funktioner f\u00f6r att enkelt dela str\u00e4ngar och heltal i PHP med hj\u00e4lp av regulj\u00e4ra uttryck.<\/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":[848,901,807,724],"tags":[1173],"class_list":["post-230139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230139"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}