{"id":407,"date":"2021-11-23T12:00:10","date_gmt":"2021-11-23T12:00:10","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=407"},"modified":"2021-11-23T12:02:19","modified_gmt":"2021-11-23T12:02:19","slug":"php-array-parsing-string-como-array-bidimensional-no-hacker-rank","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/11\/23\/php-array-parsing-string-como-array-bidimensional-no-hacker-rank\/","title":{"rendered":"PHP ARRAY Parsing String Como Array Bidimensional no Hacker Rank"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">\/\/Hacker Rank Input\n\/\/1 10 11 9 8 7 6 5 2 8 12, 7 58 2 34 76 88 2 5 3 8 11, 9 65 3 8 98 36 22 87 66 99 0\n\n\/* Read and parse input *\/\n$handle = fopen ('php:\/\/stdin', 'r');\n$string_array = fgets($handle);\n\n<meta charset=\"utf-8\">$array = explode(', ', $string_array);\n\narray_walk($array, function (&amp;$element) {\n    $element = explode(' ', $element);\n});\n\n\/\/ do your job with bidimensional $array\n<\/pre>\n\n\n\n<p>Via de regra, quando estamos no ambiente Hacker Rank, para obtermos um array de um enunciado de um problema em PHP temos que fazer o parsing de uma string dada as caracter\u00edsticas do input pelo STDIN.<\/p>\n\n\n\n<p>As coisas podem se complicar bastante se o parsing n\u00e3o for bem executado, e \u00e9 claro que com a press\u00e3o da competi\u00e7\u00e3o, \u00e9 o que geralmente acontece.<\/p>\n\n\n\n<p>O problema n\u00e3o \u00e9 do problema em si, por que depois que passa a competi\u00e7\u00e3o e a press\u00e3o voc\u00ea olha pra ele e diz&#8230; PQP!<\/p>\n\n\n\n<p>Ent\u00e3o fica a\u00ed a dica, basta observar com calma, e principalmente observar os delimitadores. Neste caso o primeiro delimitador n\u00e3o \u00e9 simplesmente uma v\u00edrgula, mas sim dois caracteres v\u00edrgula e espa\u00e7o combinados.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><meta charset=\"utf-8\"># wrong delimiter applied on first level \n$array = explode(',', $string_array);\n\n\/\/ [0]=> string(24) \"1 10 11 9 8 7 6 5 2 8 12\"\n\/\/ [1]=> string(26) \" 7 58 2 34 76 88 2 5 3 8 11\"\n\/\/ [2]=> string(29) \" 9 65 3 8 98 36 22 87 66 99 0<\/pre>\n\n\n\n<p>Deste ponto em diante as coisas se complicam, pois apesar de termos um array unidimensional de tr\u00eas elementos, o pr\u00f3ximo explode vai gerar o segundo n\u00edvel com mais elementos do que o esperado por conter um espa\u00e7o a mais.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># wrong quantity of elements on second level\n<meta charset=\"utf-8\">array_walk($array, function (&amp;$element) {\n    $element = explode(' ', $element);\n});\n\n<meta charset=\"utf-8\">\/\/ [0]=> array(11)\n\/\/ [1]=> array(12)\n\/\/ [2]=> array(12)<\/pre>\n\n\n\n<p>Agora n\u00e3o tem mais desculpas, essa \u00e9 pra n\u00e3o esquecer mais.<\/p>\n\n\n\n<p><em>Dang it!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/Hacker Rank Input \/\/1 10 11 9 8 7 6 5 2 8 12, 7 58 2 34 76 88 2 5 3 8 11, 9 65 3 8 98 36 22 87 66 99 0 \/* Read and parse input *\/ $handle = fopen (&#8216;php:\/\/stdin&#8217;, &#8216;r&#8217;); $string_array = fgets($handle); $array = explode(&#8216;, &#8216;, $string_array); [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,2,3],"tags":[63,84,120,179],"class_list":["post-407","post","type-post","status-publish","format-standard","hentry","category-backend","category-coding","category-php","tag-array","tag-array_walk","tag-explode","tag-hackerrank"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=407"}],"version-history":[{"count":2,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/407\/revisions"}],"predecessor-version":[{"id":410,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/407\/revisions\/410"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}