valores multidimensional elementos ejemplos asociativo array_push array agregar php arrays function

multidimensional - PHP agrega una matriz a otra(no array_push o+)



ejemplos de array_push en php (12)

¿Cómo agregar una matriz a otra sin comparar sus claves?

$a = array( ''a'', ''b'' ); $b = array( ''c'', ''d'' );

Al final debería ser: Array( [0]=>a [1]=>b [2]=>c [3]=>d ) Si uso algo como [] o array_push , causará uno de estos resultados:

Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) ) //or Array( [0]=>c [1]=>d )

Simplemente debería ser algo, hacer esto, pero de una manera más elegante:

foreach ( $b AS $var ) $a[] = $var;


¿Por qué no usar

$appended = array_merge($a,$b);

¿Por qué no quieres usar esto, el método correcto e incorporado?


Antes de PHP7 puedes usar:

array_splice($a, count($a), 0, $b);


Es una publicación bastante antigua, pero quiero agregar algo sobre la adición de una matriz a otra:

Si

  • una o ambas matrices tienen claves asociativas
  • las claves de ambas matrices no importan

Puedes usar funciones de matriz como esta:

array_merge(array_values($array), array_values($appendArray));

array_merge no combina claves numéricas, por lo que agrega todos los valores de $ appendArray. Al usar funciones nativas de php en lugar de foreach-loop, debería ser más rápido en arreglos con muchos elementos.


Otra forma de hacer esto en PHP 5.6+ sería usar el token ...

$a = array(''a'', ''b''); $b = array(''c'', ''d''); array_push($a, ...$b); // $a is now equals to array(''a'',''b'',''c'',''d'');

Esto también funcionará con cualquier Traversable

$a = array(''a'', ''b''); $b = new ArrayIterator(array(''c'', ''d'')); array_push($a, ...$b); // $a is now equals to array(''a'',''b'',''c'',''d'');

Sin embargo, una advertencia , esto causará un error fatal si la matriz $b está vacía


Para una matriz grande, es mejor concatenar sin array_merge, para evitar una copia de memoria.

$array1 = array_fill(0,50000,''aa''); $array2 = array_fill(0,100,''bb''); // Test 1 (array_merge) $start = microtime(true); $r1 = array_merge($array1, $array2); echo sprintf("Test 1: %.06f/n", microtime(true) - $start); // Test2 (avoid copy) $start = microtime(true); foreach ($array2 as $v) { $array1[] = $v; } echo sprintf("Test 2: %.06f/n", microtime(true) - $start); // Test 1: 0.004963 // Test 2: 0.000038


Qué tal esto:

$appended = $a + $b;


Si desea combinar una matriz vacía con un nuevo valor existente. Debes inicializarlo primero.

$products = array(); //just example for($brand_id=1;$brand_id<=3;$brand_id++){ array_merge($products,getByBrand($brand_id)); } // it will create empty array print_r($a); //check if array of products is empty for($brand_id=1;$brand_id<=3;$brand_id++){ if(empty($products)){ $products = getByBrand($brand_id); }else{ array_merge($products,getByBrand($brand_id)); } } // it will create array of products

Espero su ayuda.


Siguiendo con las respuestas de bstoney y Snark, hice algunas pruebas sobre los diversos métodos:

$array1 = array_fill(0,50000,''aa''); $array2 = array_fill(0,50000,''bb''); // Test 1 (array_merge) $start = microtime(true); $array1 = array_merge($array1, $array2); echo sprintf("Test 1: %.06f/n", microtime(true) - $start); // Test2 (foreach) $start = microtime(true); foreach ($array2 as $v) { $array1[] = $v; } echo sprintf("Test 2: %.06f/n", microtime(true) - $start); // Test 3 (... token) // PHP 5.6+ and produces error if $array2 is empty $start = microtime(true); array_push($array1, ...$array2); echo sprintf("Test 3: %.06f/n", microtime(true) - $start);

Lo que produce:

Test 1: 0.008392 Test 2: 0.004626 Test 3: 0.003574

Creo que a partir de PHP 7, el método 3 es una alternativa significativamente mejor debido a la forma en que actúan los bucles foreach ahora , que es hacer una copia de la matriz que se está iterando.

Si bien el método 3 no es estrictamente una respuesta a los criterios de ''no array_push'' en la pregunta, es una línea y el rendimiento más alto en todos los aspectos, creo que la pregunta se hizo antes de que ... la sintaxis fuera una opción.


foreach loop es más rápido que array_merge para agregar valores a una matriz existente, así que elija el bucle en su lugar si desea agregar una matriz al final de otra.

// Create an array of arrays $chars = []; for ($i = 0; $i < 15000; $i++) { $chars[] = array_fill(0, 10, ''a''); } // test array_merge $new = []; $start = microtime(TRUE); foreach ($chars as $splitArray) { $new = array_merge($new, $splitArray); } echo microtime(true) - $start; // => 14.61776 sec // test foreach $new = []; $start = microtime(TRUE); foreach ($chars as $splitArray) { foreach ($splitArray as $value) { $new[] = $value; } } echo microtime(true) - $start; // => 0.00900101 sec // ==> 1600 times faster


array_merge es la forma elegante:

$a = array(''a'', ''b''); $b = array(''c'', ''d''); $merge = array_merge($a, $b); // $merge is now equals to array(''a'',''b'',''c'',''d'');

Haciendo algo como:

$merge = $a + $b; // $merge now equals array(''a'',''b'')

No funcionará, porque el operador + realidad no los fusiona. Si $a tiene las mismas claves que $b , no hará nada.


$a = array("a", "b"); $b = array("c", "d"); $a = implode(",", $a); $b = implode(",", $b); $c = $a . "," . $b; $c = explode(",", $c);


<?php // Example 1 [Merging associative arrays. When two or more arrays have same key // then the last array key value overrides the others one] $array1 = array("a" => "JAVA", "b" => "ASP"); $array2 = array("c" => "C", "b" => "PHP"); echo " <br> Example 1 Output: <br>"; print_r(array_merge($array1,$array2)); // Example 2 [When you want to merge arrays having integer keys and //want to reset integer keys to start from 0 then use array_merge() function] $array3 =array(5 => "CSS",6 => "CSS3"); $array4 =array(8 => "JAVASCRIPT",9 => "HTML"); echo " <br> Example 2 Output: <br>"; print_r(array_merge($array3,$array4)); // Example 3 [When you want to merge arrays having integer keys and // want to retain integer keys as it is then use PLUS (+) operator to merge arrays] $array5 =array(5 => "CSS",6 => "CSS3"); $array6 =array(8 => "JAVASCRIPT",9 => "HTML"); echo " <br> Example 3 Output: <br>"; print_r($array5+$array6); // Example 4 [When single array pass to array_merge having integer keys // then the array return by array_merge have integer keys starting from 0] $array7 =array(3 => "CSS",4 => "CSS3"); echo " <br> Example 4 Output: <br>"; print_r(array_merge($array7)); ?>

Salida:

Example 1 Output: Array ( [a] => JAVA [b] => PHP [c] => C ) Example 2 Output: Array ( [0] => CSS [1] => CSS3 [2] => JAVASCRIPT [3] => HTML ) Example 3 Output: Array ( [5] => CSS [6] => CSS3 [8] => JAVASCRIPT [9] => HTML ) Example 4 Output: Array ( [0] => CSS [1] => CSS3 )

Código fuente de referencia