Error en el manejo de los índices enteros en la función
array_merge de PHP.
Antes de continuar usted debe de saber:
· Conceptos básicos de programación en PHP.
· Como escribir un código en PHP y probarlo.
Introducción:
La función array_merge tiene un problema al fusionar algún arreglo que
contenga enteros como índices. En PHP los índices se configuran de la
siguiente manera 12=>”12”. En este ejemplo el número a la izquierda es un
entero (índice) y el contenido a la derecha es texto (valor). El siguiente
articulo muestra casos donde esta función no produce el resultado esperado y
ofrece una solución sencilla para arreglar esta situación.
Nota aclaratoria:
Esta información ha sido verificada y validada para la versión que indica en
la línea que lee: “TEST ON:”.
El problema de array_merge:
1) Primera prueba:
//TEST ON: PHP Version 5.4.7 Build: Sep 12 2012 23:44:56 Architecture x86
_64 Windows 7
$primer_array=array(12=>"12",13=>"13");
$segundo_array=array("a"=>"12a","b"=>"13a");
var_dump($primer_array);
//THIS WILL OUTPUT: array(2) { [12]=> string(2) "12" [13]=> string(2) "13" }
echo "<hr>";
var_dump($segundo_array);
//THIS WILL OUTPUT: array(2) { ["a"]=> string(3) "12a" ["b"]=> string(3) "13a" }
echo "<hr>";
var_dump(array_merge($primer_array,$segundo_array));
//THIS WILL OUTPUT: array(4) { [0]=> string(2) "12" [1]=> string(2) "13" ["a"]=>
string(3) "12a" ["b"]=> string(3) "13a" }
1) Segunda prueba:
//TEST ON: PHP Version 5.3.8 Build: Oct 14 2013 11:08:17 Architecture x86_
64 Linux
$primer_array=array(12=>"12",13=>"13");
$segundo_array=array("a"=>"12a","b"=>"13a");
var_dump($primer_array);
//THIS WILL OUTPUT: array(2) { [12]=> string(2) "12" [13]=> string(2) "13" }
echo "<hr>";
var_dump($segundo_array);
//THIS WILL OUTPUT: array(2) { ["a"]=> string(3) "12a" ["b"]=> string(3) "13a" }
echo "<hr>";
var_dump(array_merge($primer_array,$segundo_array));
//THIS WILL OUTPUT: array(4) { [0]=> string(2) "12" [1]=> string(2) "13" ["a"]=>
string(3) "12a" ["b"]=> string(3) "13a" }
Una solución para fusionar (unir) dos arreglos:
function jenkins_array_merge($array1,$array2)
{
$return_data=false;
if(is_array($array1) && is_array($array2))
{
$a1keys= array_keys($array1);
$a2keys= array_keys($array2);
foreach($a1keys as $key)
{
$return_data[$key]=$array1[$key];
}//foreach
foreach($a2keys as $key)
{
$return_data[$key]=$array2[$key];
}//foreach
}//if
return $return_data;
}//fx
En esencia:
Si utiliza esta función verifique si su código depende de los índices que
pueda tener un arreglo y remplace el uso de la misma para evitar que su
programa funcione incorrectamente.