2010-05-20 6 views
6

Necesito una solución para array_replace_recursive, porque mi versión php no es lo suficientemente alta. Deseo utilizar este código:php: array_replace_recursive alternative

$_GET = array_replace_recursive($_GET, array("__amp__"=>"&")); 

fácil, ¿verdad?

Respuesta

5

En la página de documentación de PHP para array_replace_recursive, alguien publicó el siguiente código para usar en lugar de ello:

<?php 
if (!function_exists('array_replace_recursive')) 
{ 
    function array_replace_recursive($array, $array1) 
    { 
    function recurse($array, $array1) 
    { 
     foreach ($array1 as $key => $value) 
     { 
     // create new key in $array, if it is empty or not an array 
     if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) 
     { 
      $array[$key] = array(); 
     } 

     // overwrite the value in the base array 
     if (is_array($value)) 
     { 
      $value = recurse($array[$key], $value); 
     } 
     $array[$key] = $value; 
     } 
     return $array; 
    } 

    // handle the arguments, merge one by one 
    $args = func_get_args(); 
    $array = $args[0]; 
    if (!is_array($array)) 
    { 
     return $array; 
    } 
    for ($i = 1; $i < count($args); $i++) 
    { 
     if (is_array($args[$i])) 
     { 
     $array = recurse($array, $args[$i]); 
     } 
    } 
    return $array; 
    } 
} 
?> 
+1

Al utilizar la función más de una vez, me sale: Error grave: no se puede redeclare recurse() – mikewasmike

1

El código anterior por @Justin está bien, excepto por 2 cosas:

  1. La función no está disponible al inicio de la ejecución de php porque está envuelta en if(). PHP docu dice

    When a function is defined in a conditional manner such as the two examples shown. Its definition must be processed prior to being called.

  2. más importante; Llamar a la función dos veces resulta en un error fatal. PHP docu dice

    All functions and classes in PHP have the global scope - they can be called outside a function even if they were defined inside and vice versa.

Así que sólo se trasladaron fuera de la función recursearray_replace_recursive función y funcionó bien. También elimina la condición if() y le cambió el nombre a array_replace_recursive_b4php53 por temor a futuras revalorizaciones

+0

Esto debería ser un comentario sobre la respuesta de Justin (porque el espacio está limitado en un comentario, puede publicar el mensaje completo en un enlace). Marcado como esta no es una respuesta. – mickmackusa