Объединить два элемента массива с одним и тем же элементом

У меня есть 2 массива через вызов API.

    $array1 = array(
    0 => array(
        'rest_id' => 8,
        'price_rates' => Array(
                       'menu' => Array(
                                        0 => Array(
                                            'menu_id' => 'm11',
                                            'price' => 100
                                        )                
                                ),
                        'comparision' => 'superior'
        )
    ),
    1 => array(
        'rest_id' => 9,
        'price_rates' => Array(
                                'menu' => Array(
                                                0 => Array(
                                                    'menu_id' => 'm22',
                                                    'price' => 80
                                                )              
                                ),
            'comparision' => 'medium'
        )
    ),
    2 => array(
        'rest_id' => 400,
        'price_rates' => Array(
                                'menu' => Array(
                                                0 => Array(
                                                    'menu_id' => 'm401',
                                                    'price' => 33
                                                )                
                                ),
            'comparision' => 'low'
        )
    )
);

    $array2 = array(
    0 => array(
        'address' => 'No.12,XXX country',   
        'rest_id' => 400    
    ),
    1 => array(
        'address' => 'No.18,XYZ country',   
        'rest_id' => 8    
    )
);

Я хочу объединить эти два массива с 'rest_id', которые включают только второй массив. И желаемый результат

$result_array = array(
0 => array(
    'rest_id' => 8,
    'price_rates' => Array(
                   'menu' => Array(
                                    0 => Array(
                                        'menu_id' => 'm11',
                                        'price' => 100
                                    )                
                            ),
                    'comparision' => 'superior'
    ),
    'address' => 'No.18,XYZ country'
),
1 => array(
    'rest_id' => 400,
    'price_rates' => Array(
                            'menu' => Array(
                                            0 => Array(
                                                'menu_id' => 'm401',
                                                'price' => 33
                                            )                
                            ),
        'comparision' => 'low'
    ),
    'address' => 'No.12,XXX country'
)

);

Является ли это возможным? Я искал подобные вопросы. Но не могу найти ответы. Любая помощь будет оценена по достоинству. Спасибо..


person Bean    schedule 20.07.2015    source источник
comment
Да, это возможно. .com/questions/11633918/ , stackoverflow.com/questions/14853261/   -  person Narendrasingh Sisodia    schedule 20.07.2015
comment
Вам нужно будет написать собственные циклы для достижения этого...   -  person meen    schedule 20.07.2015
comment
stackoverflow.com/questions/11633918 / Тот, который объединяет оба массива. В мой массив результатов должны быть включены значения, которые есть в обоих массивах. Спасибо.   -  person Bean    schedule 20.07.2015


Ответы (2)


Я решил это с помощью пользовательского цикла в качестве комментария.

$result = array();

foreach($array1 as $values)
{
foreach($array2 as $values2)
{
    if($values['rest_id'] == $values2['rest_id'])
    {
        $result[] = array_merge_recursive($values, $values2);
        break;
    }
}
}

Хотя элемент 'rest_id' изменил строку на массив в результирующем массиве из-за функции array_merge_recursive(), теперь я могу легко им управлять.

[rest_id] => Array
            (
                [0] => 400
                [1] => 400
            )

Спасибо за все предложения и ответы :)

person Bean    schedule 21.07.2015

Этот код должен помочь:

foreach($array2 as $key=>$val) {
    $array1[$key]['address'] = $val;
}

(Это приведет к $array1 включая все значения)

person David C    schedule 20.07.2015
comment
Это не то, что спрашивают. OP нужны только значения, которые есть в обоих массивах (rest_id=9 не должно быть в выводе из примера). - person Random; 20.07.2015