{"id":228220,"date":"2022-10-13T13:27:00","date_gmt":"2022-10-13T10:27:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228220"},"modified":"2022-11-09T01:21:06","modified_gmt":"2022-11-08T22:21:06","slug":"trozo-de-matriz","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/trozo-de-matriz\/","title":{"rendered":"Trozo de matriz"},"content":{"rendered":"\n<p>Usando un fragmento de matriz (<code>array_chunk<\/code>) podemos dividir f\u00e1cilmente una matriz en una matriz multidimensional (una matriz de matrices).<\/p>\n<p>La funci\u00f3n de fragmento de matriz podr\u00eda usarse para dividir una matriz en partes m\u00e1s peque\u00f1as, tal vez para que sea m\u00e1s f\u00e1cil de procesar.<\/p>\n<h2>Ejemplo b\u00e1sico<\/h2>\n<p>Suponiendo que configuramos una matriz seg\u00fan el ejemplo de c\u00f3digo a continuaci\u00f3n (<code>$array<\/code>en la l\u00ednea 1), podemos dividir esta matriz en una nueva matriz multidimensional utilizando la <code>array_chunk<\/code>funci\u00f3n en la l\u00ednea 9.<\/p>\n<p>Ejecutar este c\u00f3digo dar\u00eda como resultado la matriz multidimensional en la l\u00ednea 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>Composici\u00f3n<\/h2>\n<pre><code>$chunked_array = array_chunk( $array, $chunk, $preserve_keys );\n<\/code><\/pre>\n<p>La <code>array_chunk<\/code>funci\u00f3n acepta tres par\u00e1metros, <code>$array<\/code>y <code>$chunk<\/code>( <code>$preserve_keys<\/code>opcional, falso por defecto). Estos son los siguientes:<\/p>\n<ol>\n<li>El <code>$array<\/code>par\u00e1metro acepta un arreglo, y es el arreglo inicial que deseamos transformar.<\/li>\n<li>El <code>$chunk<\/code>acepta un n\u00famero entero, y es el n\u00famero que usamos para dividir el <code>$array<\/code>en partes de este valor.<\/li>\n<li>El par\u00e1metro opcional <code>$preserve_keys<\/code>acepta un valor booleano y conservar\u00e1 las claves de la matriz si <code>true<\/code>.<\/li>\n<\/ol>\n<h2>Caracter\u00edsticas y ejemplos espec\u00edficos<\/h2>\n<h3>Conservar llaves<\/h3>\n<p>Explorando el <code>$preserve_keys<\/code>par\u00e1metro, nuestro ejemplo anterior inicia el \u00edndice de cada matriz anidada en 0. Sin embargo, si tuvi\u00e9ramos que pasar <code>true<\/code>a este par\u00e1metro, el \u00edndice original de la matriz inicial se mantendr\u00eda 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>En la salida, las claves ahora son secuenciales, como lo ser\u00edan en la matriz original (0, 1, 2, 3\u2026).<\/p>\n<h3>Conservar claves cuando la matriz original tiene claves con nombre<\/h3>\n<p>Si nuestra matriz original tiene claves con nombre, podemos conservar las claves para mantenerlas en nuestra matriz fragmentada.<\/p>\n<p>El siguiente ejemplo tiene un poco de diversi\u00f3n con esto. Digamos que de alguna manera tenemos una matriz con algunos ID de publicaci\u00f3n y nombres de publicaci\u00f3n mezclados.<\/p>\n<p>Podr\u00edamos usar <code>array_chunk<\/code>con el <code>$preserve_keys<\/code>par\u00e1metro establecido en <code>true<\/code>para dividirlos en publicaciones individuales.<\/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>Todav\u00eda divirti\u00e9ndonos con esta matriz, imaginemos c\u00f3mo podr\u00edamos recorrer el <code>$chunked_array<\/code>, y generar solo los nombres.<\/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>Fragmentaci\u00f3n de un arreglo grande para su procesamiento.<\/h3>\n<p>Si tenemos una matriz muy grande, podemos usarla <code>array_chunk<\/code>para dividirla en partes m\u00e1s peque\u00f1as que luego podr\u00edamos almacenar por separado. Veamos c\u00f3mo podr\u00edamos hacer esto en 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>Otras lecturas<\/h2>\n<p>Para obtener m\u00e1s informaci\u00f3n, puede consultar el <a href=\"https:\/\/www.php.net\/manual\/en\/function.array-chunk.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manual de PHP<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <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 el fragmento de matriz (array_chunk) podemos dividir f\u00e1cilmente una matriz en una matriz multidimensional (una matriz de matrices). La funci\u00f3n de fragmento de matriz podr\u00eda usarse para dividir una matriz en peque\u00f1os&#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":[892,716,747,914,800,840],"tags":[1172],"class_list":["post-228220","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-otro","category-php-2","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228220"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228220\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224072"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}