Arrays ineinander kopieren

metaxy

Grünschnabel
also ich habe 2 arrays
Code:
Array
(
    [1] => Array
        (
            [2] => Array
               (
                  [b] => Test2
               )
        )

    [2] => Array
        (
            [a] => Test
        )

)
und
Code:
Array
(
    [1] => Array
        (
            [2] => Array
               (
                  [b] => Test
                  [ c] => Test3
               )
        )
]
wie kann ich nun ineinader kopieren und das 2.Array soll das erste teilweise überschreiben also sowas
Code:
Array
(
    [1] => Array
        (
            [2] => Array
               (
                  [b] => Test
                  [ c] => Test3
               )
        )

    [2] => Array
        (
            [a] => Test
        )
array_merge_recursive() geht nicht da wenn der key kein string ist nicht überschreibt sondern anhängt.
 
Schon unter php.net bei array_merge_recursiv() nachgeguckt?

Da hat jemand eine extra Funktion für sowas geschrieben: http://www.php.net/manual/de/function.array-merge-recursive.php#81409

Die müsste man nur noch ganz leicht abändern für dein Anliegen.
Statt dem Anhängen mit $ret[] einfach den key dazu nehmen $ret[key] = ...

EDIT: Hab selbst eine Funktion geschrieben...
PHP:
function array_recursive_merge_replace(array &$array, array $replace)
{
  do
  {
    $k = key($replace);
    if (isset($array[$k]) && is_array($array[$k]) && is_array($replace[$k]))
    {
      array_recursive_merge_replace($array[$k], $replace[$k]);
    }
    else
    {
      $array[$k] = $replace[$k];
    }
  }
  while (next($replace));
}

$a[0][1] = "ha";
$a[0][2] = "tutorials.de";
$a[1] = "foo";

$u[0][1] = "llo";
$u[1] = "MUH";

array_recursive_merge_replace($a, $u);

echo "<pre>";
var_dump($a);
echo "</pre>";

Ausgabe:
Code:
array(2) {
  [0]=>
  array(2) {
    [1]=>
    string(3) "llo"
    [2]=>
    string(2) "tutorials.de"
  }
  [1]=>
  string(4) "MUH"
}

Geht allerdings erstmal nur mit zwei Arrays ;)
 
Zuletzt bearbeitet:
Zurück