8 Stimmen

Array zusammenführen/ersetzen

Ich habe zwei Arrays:

Array
(
    [2005] => 0
    [2006] => 0
    [2007] => 0
    [2008] => 0
    [2009] => 0
)

Array
(
    [2007] => 5
    [2008] => 6.05
    [2009] => 7
)

Ich möchte diese beiden Arrays zusammenführen, so dass, wenn ein Wert im 2. Array vorhanden ist, dieser den Wert des ersten Arrays überschreibt. So würde das resultierende Array sein:

Array
(
    [2005] => 0
    [2006] => 0
    [2007] => 5
    [2008] => 6.05
    [2009] => 7
)

Vielen Dank für Ihre Hilfe.

UPDATE: Das war mein bester Versuch, aber er ist gründlich misslungen:

    $final = '';
    foreach ($years as $k => $v){
        if (in_array($k,$values)){
            $final .= $values[$k] . '|';
        }else{
            $final .= $k[$v] . '|';
        }

    }

    echo "final = $final";

38voto

Chad Birch Punkte 70946

Wie ich erst kürzlich erfahren habe, hat PHP eine Array-Union-Operator die genau dies tut:

$result = $a + $b;

Dabei ist $a das Array mit den Werten, die Vorrang haben sollen. (In Ihrem Beispiel bedeutet das also, dass das zweite Array " $a ".

15voto

Joel Kornbluh Punkte 1407

So einfach ist das:

$new_array = array_replace(array_1,array_2) ;

die php-Handbuchseite

4voto

KyleFarris Punkte 16918

Kann es nicht so einfach sein?

$new_array = array_unique(array_merge($ar1,$ar2));

Vielleicht übersehe ich etwas oder ich bin verrückt.

3voto

José Leal Punkte 7777

Ich habe das für innere Arrays ein wenig geändert, Danke für deinen Code, der eine Idee für den ersten Schritt gibt :)

function combine($a1, $a2) {
    foreach($a2 as $k => $v) {
        if(is_array($v)) {
            if(!isset($a1[$k]))
                $a1[$k] = null;

            $a1[$k] = combine($a1[$k], $v);
        } else {
            $a1[$k] = $v;
        }
    }
    return $a1;
}

1voto

Brian Duff Punkte 406

Ich bin nicht so vertraut mit PHP, aber etwas wie:

foreach ($array2 as $i => $value) {
  $array1[$i] = $value;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X