2010-05-20 5 views
6

J'ai besoin d'une solution pour array_replace_recursive, parce que ma version php n'est pas assez élevée. Je veux utiliser ce code:php: array_replace_recursive alternative

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

facile, n'est-ce pas?

Répondre

5

Sur la page docs PHP pour array_replace_recursive, quelqu'un a publié le code source ci-dessous pour utiliser à la place de celui-ci:

<?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

Lorsque vous utilisez la fonction plus d'une fois, je reçois: Erreur fatale: Impossible redéclarer recurse() – mikewasmike

1

Le code ci-dessus par @Justin est ok, sauf pour 2 choses:

  1. La fonction n'est pas disponible au démarrage de l'exécution php car elle est enveloppée dans if(). PHP docu dit

    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. Plus important encore; appeler deux fois la fonction entraîne une erreur fatale. PHP docu dit

    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.

Je viens donc déplacé la fonction recurse en dehors array_replace_recursive fonction et il a bien fonctionné. J'ai aussi enlevé la condition if() et retitré à array_replace_recursive_b4php53 de peur de l'avenir Revalorisations

+0

Cela devrait être un commentaire sur la réponse de Justin (parce que l'espace est limité dans un commentaire, vous pouvez poster le message complet dans un lien). Marqué comme ceci n'est pas une réponse. – mickmackusa