PHP - объединение массивов - PullRequest
2 голосов
/ 14 июня 2009

У меня есть два массива ...

$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)
);

Вот желаемый результат:

$final = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'long', 'hidden' => true),
    'zipcode' => array('default' => 12345, 'hidden' => false)
);
  • Используются только элементы из $ arr2 (которые также существуют в $ arr1)
  • Атрибуты каждого элемента объединены
  • Если общий элемент (например, почтовый индекс) разделяет атрибут (например, скрытый), то атрибут из $ arr2 имеет приоритет

Какие есть хорошие подходы для решения этой проблемы?

Заранее спасибо.

РЕДАКТИРОВАТЬ: Я пытался что-то помешать ... критика приветствуется:

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

2 голосов
/ 14 июня 2009

Вы были близки

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

Редактировать Просто пришлось изменить array_intersect на array_intersect_key

0 голосов
/ 14 июня 2009

может оказаться полезным array_intersect ()

текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...