Есть ли PHP-функция для объединения результатов двух массивов на основе ключей? - PullRequest
1 голос
/ 20 мая 2010

Если у меня есть следующие массивы

arry1 = array(
    101 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data'
    ),
    102 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data'
    ),
    .
    .
    .
);

arry2 = array(
    101 => array(
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    102 => array(
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    .
    .
    .
);

и я хочу изменить их на

arry3 = array(
    101 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data',
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    102 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data',
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    .
    .
    .
);

Существует ли простая функция из php-массивов для этого? Если нет, что, по вашему мнению, было бы наиболее эффективным способом программирования этого?

Спасибо за любую помощь,
Metropolis

EDITED
Извините, я обновил массивы, чтобы они стали такими, какими они должны быть ... array_merge_recursive дает мне следующее,

arry3 = array(
    0 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data'
    ),
    1 => array(
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    .
    .
    .
);

Мне нужны 101 и 102, чтобы прикрепить, и мне нужно, чтобы все данные были в одном и том же массиве более низкого уровня ....

1 Ответ

2 голосов
/ 20 мая 2010

Полагаю, вы хотите добавить последний массив в первый. Поэтому используйте это :

array_merge_recursive(array1, array2);

... и он будет делать именно то, что вы хотите.

EDIT:
Похоже, что мое решение не совсем корректно, используйте это:

<?

function array_merge_subarrays(array $array1, array $array2) {
    $resultArray = array();
    // The foreach instead of a plain for is to keep the specific values of the keys
    foreach ($array1 as $key => $subarray) {
        $resultArray[$key] = array_merge($subarray, $array2[$key]);
    }
    return $resultArray;
}

$arr1 = array(
    101 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data'
    ),
    102 => array(
        'title1' => 'data', 
        'title2' => 'data', 
        'title3' => 'data'
    )
);

$arr2 = array(
    101 => array(
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    ),
    102 => array(
        'title4' => 'data', 
        'title5' => 'data', 
        'title6' => 'data'
    )
);

print_r(array_merge_subarrays($arr1, $arr2));

/*

OUTPUTS:

Array ( 
    [101] => Array ( 
        [title1] => data
        [title2] => data
        [title3] => data
        [title4] => data
        [title5] => data
        [title6] => data
    )
    [102] => Array (
        [title1] => data 
        [title2] => data 
        [title3] => data 
        [title4] => data 
        [title5] => data 
        [title6] => data
    )
)

*/

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