{"id":228552,"date":"2022-10-13T13:49:00","date_gmt":"2022-10-13T10:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228552"},"modified":"2022-11-09T02:59:05","modified_gmt":"2022-11-08T23:59:05","slug":"bloco-de-matriz","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/bloco-de-matriz\/","title":{"rendered":"Bloco de Matriz"},"content":{"rendered":"\n<p>Usando array chunk (<code>array_chunk<\/code>) podemos facilmente dividir um array em um array multidimensional (um array de arrays).<\/p>\n<p>A fun\u00e7\u00e3o array chunk pode ser usada para dividir um array em partes menores, talvez para torn\u00e1-lo mais f\u00e1cil de processar.<\/p>\n<h2>Exemplo b\u00e1sico<\/h2>\n<p>Supondo que configuramos um array conforme o exemplo de c\u00f3digo abaixo (<code>$array<\/code>na linha 1), podemos fragmentar esse array em um novo array multidimensional usando a <code>array_chunk<\/code>fun\u00e7\u00e3o na linha 9.<\/p>\n<p>A execu\u00e7\u00e3o desse c\u00f3digo resultaria na matriz multidimensional na linha 15.<\/p>\n<pre><code>$array = [\n    'Post 0', \n    'Post 1', \n    'Post 2', \n    'Post 3', \n    'Post 4', \n    'Post 5',\n];\n$chunked_array = array_chunk( $array, 2 );\nprint_r( $chunked_array ); \/\/ Output the new array.\n\n\/**\n * Output:\n *\n * Array\n * (*   [0] =&gt; Array\n * (*          [0] =&gt; Post 0\n *          [1] =&gt; Post 1\n *) *   [1] =&gt; Array\n * (*          [0] =&gt; Post 2\n *          [1] =&gt; Post 3\n *) *   [2] =&gt; Array\n * (*           [0] =&gt; Post 4\n *           [1] =&gt; Post 5\n *) *)\n **\/\n<\/code><\/pre>\n<h2>Composi\u00e7\u00e3o<\/h2>\n<pre><code>$chunked_array = array_chunk( $array, $chunk, $preserve_keys );\n<\/code><\/pre>\n<p>A <code>array_chunk<\/code>fun\u00e7\u00e3o aceita tr\u00eas par\u00e2metros, <code>$array<\/code>e <code>$chunk<\/code>( <code>$preserve_keys<\/code>opcional, falso por padr\u00e3o). Estes s\u00e3o os seguintes:<\/p>\n<ol>\n<li>O <code>$array<\/code>par\u00e2metro aceita um array e \u00e9 o array inicial que desejamos transformar.<\/li>\n<li>O <code>$chunk<\/code>aceita um inteiro, e \u00e9 o n\u00famero que usamos para dividir <code>$array<\/code>em partes desse valor.<\/li>\n<li>O par\u00e2metro opcional <code>$preserve_keys<\/code>aceita um booleano e preservar\u00e1 as chaves do array se <code>true<\/code>.<\/li>\n<\/ol>\n<h2>Recursos e exemplos espec\u00edficos<\/h2>\n<h3>Preservar chaves<\/h3>\n<p>Explorando o <code>$preserve_keys<\/code>par\u00e2metro, nosso exemplo anterior inicia o \u00edndice de cada array aninhado em 0. No entanto, se passarmos <code>true<\/code>para este par\u00e2metro, o \u00edndice original do array inicial seria mantido intacto:<\/p>\n<pre><code>$array = [\n    'Post 0', \n    'Post 1', \n    'Post 2', \n    'Post 3', \n    'Post 4', \n    'Post 5',\n];\n$chunked_array = array_chunk( $array, 2, true );\nprint_r( $chunked_array ); \/\/ Output the new array.\n\n\/**\n * Output:\n *\n * Array\n * (*   [0] =&gt; Array\n * (*          [0] =&gt; Post 0\n *          [1] =&gt; Post 1\n *) *   [1] =&gt; Array\n * (*          [2] =&gt; Post 2\n *          [3] =&gt; Post 3\n *) *   [2] =&gt; Array\n * (*           [4] =&gt; Post 4\n *           [5] =&gt; Post 5\n *) *)\n **\/\n<\/code><\/pre>\n<p>Na sa\u00edda, as chaves agora s\u00e3o sequenciais, como seriam no array original (0, 1, 2, 3\u2026).<\/p>\n<h3>Preservar chaves quando a matriz original tiver chaves nomeadas<\/h3>\n<p>Se nosso array original tiver chaves nomeadas, podemos preservar as chaves para mant\u00ea-las em nosso array em partes.<\/p>\n<p>O exemplo a seguir tem um pouco de divers\u00e3o com isso. Digamos que temos de alguma forma um array com alguns Post IDs e Post Names misturados.<\/p>\n<p>Poder\u00edamos usar <code>array_chunk<\/code>com o <code>$preserve_keys<\/code>par\u00e2metro definido como <code>true<\/code>para dividi-los em postagens individuais.<\/p>\n<pre><code>$array = [\n    'id_0'   =&gt; '10', \n    'name_0' =&gt; 'Post 1', \n    'id_1'   =&gt; '20', \n    'name_1' =&gt; 'Post 2', \n    'id_2'   =&gt; '30', \n    'name_2' =&gt; 'Post 3',\n];\n$chunked_array = array_chunk( $array, 2, true);\nprint_r( $chunked_array ); \n<\/code><\/pre>\n<p>Ainda nos divertindo com esse array, vamos imaginar como poder\u00edamos fazer um loop pelo <code>$chunked_array<\/code>, e produzir apenas os nomes.<\/p>\n<pre><code>foreach( $chunked_array as $key =&gt; $nested_array) {\n    echo $nested_array[ 'name_'. $key ]. PHP_EOL;\n}\n<\/code><\/pre>\n<h3>Chunking uma grande matriz para processamento.<\/h3>\n<p>Se tivermos uma matriz muito grande, podemos <code>array_chunk<\/code>dividi-la em peda\u00e7os menores que poder\u00edamos armazenar separadamente. Vamos ver como podemos fazer isso no WordPress:<\/p>\n<pre><code>$original_array = [...]; \n$post_id        = get_the_ID();\n$chunked_array  = array_chunk( $original_array, 10, true );\n\nforeach( $chunked_array as $key =&gt; $array) {\n    update_post_meta( \n        $post_id,\n        '_wc_chunked_array_partial_'. $post_id,\n        $array\n    );\n}\n<\/code><\/pre>\n<h2>Leitura adicional<\/h2>\n<p>Para mais leitura voc\u00ea pode verificar o <a href=\"https:\/\/www.php.net\/manual\/en\/function.array-chunk.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manual do PHP<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usando array chunk (array_chunk) podemos facilmente dividir um array em um array multidimensional (um array de arrays). A fun\u00e7\u00e3o array chunk pode ser usada para dividir um array em pequenos&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224072,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,753,722,920,806,846],"tags":[1170],"class_list":["post-228552","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-outro","category-php-8","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/228552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=228552"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/228552\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/224072"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=228552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=228552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=228552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}