2 Stimmen

PHP - Arrays zusammenführen

Ich habe zwei Arrays...

$arr1 = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'short'),
    'address',
    'zipcode' => array('default' => 12345, 'hidden' => true)
);

$arr2 = array(
    'name',
    'language',
    'date' => array('format' => 'long', 'hidden' => true),
    'zipcode' => array('hidden' => false)
);

Hier ist das gewünschte Ergebnis:

$final = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'long', 'hidden' => true),
    'zipcode' => array('default' => 12345, 'hidden' => false)
);
  • Nur die Elemente aus $arr2 (die auch in $arr1 vorhanden sind) werden verwendet
  • Die Attribute der einzelnen Elemente werden zusammengeführt
  • Wenn ein gemeinsames Element (z. B. Postleitzahl) ein gemeinsames Attribut hat (z. B. versteckt), dann hat das Attribut aus $arr2 Vorrang.

Was sind gute Ansätze zur Lösung dieses Problems?

Vielen Dank im Voraus.

EDIT: Ich habe versucht, etwas zusammenzubasteln... Kritik willkommen:

$new_array = array_intersect_key($arr2, $arr1);

foreach ($new_array as $key => $val)
{
    if (is_array($arr1[$key]))
    {
        if (is_array($val))
        {
            $new_array[$key] = array_merge($val, $arr1[$key]);
        }
        else
        {
            $new_array[$key] = $arr1[$key];
        }
    }
}

2voto

Ian Elliott Punkte 7338

Du warst nah dran

$newArr = array_intersect_key($arr1, $arr2);
foreach ($newArr as $key => $val)
{
    if (is_array($val))
    {
        $newArr[$key] = array_merge($arr1[$key], $arr2[$key]);
    }
}

Editar Ich musste nur den array_intersect in array_intersect_key ändern

0voto

Charles Ma Punkte 44109

Sie könnten array_intersect() nützlich finden

Linktext

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