{"id":230054,"date":"2022-12-03T19:29:00","date_gmt":"2022-12-03T16:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230054"},"modified":"2022-11-09T19:53:43","modified_gmt":"2022-11-09T16:53:43","slug":"dzielenie-ciagow-i-liczb-calkowitych-w-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dzielenie-ciagow-i-liczb-calkowitych-w-php\/","title":{"rendered":"Dzielenie ci\u0105g\u00f3w i liczb ca\u0142kowitych w PHP"},"content":{"rendered":"<p>Praca z ci\u0105gami, liczbami i wyra\u017ceniami regularnymi w PHP jest stosunkowo \u0142atwa, bior\u0105c pod uwag\u0119 ogromn\u0105 liczb\u0119 funkcji, jakie zapewnia j\u0119zyk.<\/p>\n<p>Zdarzaj\u0105 si\u0119 jednak sytuacje, w kt\u00f3rych ustalenie, jak podzieli\u0107 na pewne kryteria, mo\u017ce nie by\u0107 od razu jasne lub mo\u017ce by\u0107 jasne, co musisz zrobi\u0107, ale nie jak najlepiej to zrobi\u0107.<\/p>\n<p>Zdj\u0119cie autorstwa Ag\u00ea Barros na Unsplash<\/p>\n<p>Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce masz ci\u0105g z\u0142o\u017cony z liczb i cyfr. W tym po\u015bcie za\u0142\u00f3\u017cmy, \u017ce dany ci\u0105g:<\/p>\n<ul>\n<li>obejmuje godziny i minuty,<\/li>\n<li>gdy minuty s\u0105 w 60,<\/li>\n<li>ci\u0105g powinien zwi\u0119ksza\u0107 warto\u015b\u0107 godzin o jeden<\/li>\n<li>warto\u015b\u0107 minut jest resetowana do zera.<\/li>\n<\/ul>\n<p>Przyk\u0142adowy problematyczny ci\u0105g mo\u017ce mie\u0107 posta\u0107 T3H60M. Jak wi\u0119c mo\u017cemy podzieli\u0107 \u0142a\u0144cuch na \u0142a\u0144cuchy i liczby ca\u0142kowite i odpowiednio go przebudowa\u0107?<\/p>\n<p>W tym przypadku przydatne s\u0105 trzy rzeczy. W dowolnej kolejno\u015bci:<\/p>\n<ul>\n<li>wyra\u017cenie regularne<\/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\">filtr_tablicy<\/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\">warto\u015bci_tablicy<\/a><\/li>\n<\/ul>\n<p>A kolejno\u015b\u0107, w jakiej operacje u\u017cycia ka\u017cdego z powy\u017cszych przebiegaj\u0105 mniej wi\u0119cej tak:<\/p>\n<ol>\n<li>u\u017cyj wyra\u017cenia regularnego, aby znale\u017a\u0107 wszystkie cyfry w ci\u0105gu,<\/li>\n<li>usu\u0144 wszystko opr\u00f3cz cyfr w tablicy<\/li>\n<li>je\u015bli druga cyfra to 60, to ustaw j\u0105 na zero<\/li>\n<li>zwi\u0119kszy\u0107 pierwszy indeks tablicy o jeden<\/li>\n<li>odbuduj ci\u0105g.<\/li>\n<\/ol>\n<p>Gdyby powy\u017csze kroki zosta\u0142y przekonwertowane na kod, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12#file-00-format-time-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mo\u017ce to wygl\u0105da\u0107 tak:<\/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>Zauwa\u017c, \u017ce decyduj\u0119 si\u0119 na u\u017cycie <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_filter<\/a>, aby usun\u0105\u0107 zduplikowane warto\u015bci i u\u017cyj <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4458820d452c5d144dc26fc6f6b5ac12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_values<\/a>, aby wyczy\u015bci\u0107 tablic\u0119 do zaledwie dw\u00f3ch wpis\u00f3w, z kt\u00f3rych pierwszy to godzina, a drugi minuta.<\/p>\n<p>Nast\u0119pnie okre\u015blam warto\u015b\u0107 ka\u017cdego z indeks\u00f3w tablicy (i pami\u0119taj, \u017ce s\u0105 to \u0142a\u0144cuchy, wi\u0119c b\u0119dziesz musia\u0142 rzuci\u0107 je jako liczby ca\u0142kowite, aby odpowiednio zwi\u0119kszy\u0107 ich warto\u015b\u0107.<\/p>\n<p>Na koniec buduj\u0119 ci\u0105g tak, jak (i \u200b\u200bje\u015bli) jest to potrzebne.<\/p>\n<p>Jasne, to troch\u0119 niszowy przypadek, ale rozwi\u0105zanie mo\u017cna bardziej uog\u00f3lni\u0107 w oparciu o w\u0142asne potrzeby.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>U\u017cywanie preg_split i kilku natywnych funkcji PHP do \u0142atwego dzielenia ci\u0105g\u00f3w i liczb ca\u0142kowitych w PHP za pomoc\u0105 wyra\u017ce\u0144 regularnych.<\/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":[721,897,805,845],"tags":[1169],"class_list":["post-230054","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230054"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230054\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/163201"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}