PHP - birleştirme diziler

2 Cevap php
$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)
);

Burada istenen sonuç var:

$final = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'long', 'hidden' => true),
    'zipcode' => array('default' => 12345, 'hidden' => false)
);
  • (Ayrıca $ dizi1 var) $ dizi2 sadece elemanları kullanılmaktadır
  • Her elemanın nitelikleri birleştirilir
  • Ortak bir element (örneğin posta kodu) bir niteliği (örneğin gizli) paylaşırsa, o zaman $ dizi2 itibaren nitelik önceliklidir

Bu sorunu çözmek için bazı iyi yaklaşımlar nelerdir?

Şimdiden teşekkürler.

EDIT: I tried to hobble something together... critiques welcomed:

$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];
        }
    }
}

2 Cevap

Siz yakın

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

Edit Just had to change the array_intersect to array_intersect_key

Eğer yararlı) (array_intersect bulabilirsiniz

link text