What's new on JenkinsBooks
Version universitaria
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.
 
Articulo validado