Merge two arrays with the same keys or association

I would like to create some kind of epg for the website from this. Since I have no experience, unfortunately, it is difficult for me.

I have two arrays

 Array
 (
 [0] => Array
    (
        num] => 1
        [name] => name 1
        [epg_channel_id] => ch111
        [added] => 1505435915
    )

[1] => Array
    (
        num] => 2
        [name] => name 2
        [epg_channel_id] => ch222
        [added] => 1505435915
    )

[2] => Array
    (
        [num] => 3
        [name] => name 3
        [epg_channel_id] => ch333
        [added] => 1505435915
    )

[3] => Array
    (
        [num] => 4
        [name] => name 4
        [epg_channel_id] => ch444
        [added] => 1505435915

    )

second array

 Array
 (
 [0] => Array
    (
        [ch000] => Um9jayBJbiBSaW8=
    )

[1] => Array
    (
        [ch111] => Um9jayBJbiBSaW8=
    )

[2] => Array
    (
        [ch222] => Um9jayBJbiBSaW8=
    )

[3] => Array
    (
        [ch333] => Um9jayBJbiBSaW8=
    )

[4] => Array
    (
        [ch444] => Um9jayBJbiBSaW8=
    )

I want to output something like this, insert the second array into the first array using epg_channel_id

Array
(
[0] => Array
(
    [num] => 1
    [name] => name 1
    [epg_channel_id] => ch111
    [added] => 1505435915
    [ch111] => Um9jayBJbiBSaW8=

)

I tried array_recursive, merging arrays and not working. I

+4
source share
7 answers

If the corresponding indexes in both arrays are guaranteed to have the same channel identifier, this will work quite effectively. For example, if $ array1 [0] is guaranteed to have the same channel identifier as $ array2 [0], this solution will work beautifully:

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

, , , .

, , , , , $array1. , , , .

+2

: epg_channel_id

$arr1 = Array
 (
 0 => Array
    (
        "num" => 1,
        "name" => "name 1",
        "epg_channel_id" => "ch111",
        "added" => "1505435915",
    ),
1 => Array
    (
        "num" => 2,
        "name" => "name 2",
        "epg_channel_id" => "ch222",
        "added" => "1505435915",
    ),
2 => Array
    (
        "num" => 3,
        "name" => "name 3",
        "epg_channel_id" => "ch333",
        "added" => "1505435915",
    ),
3 => Array
    (
        "num" => 4,
        "name" => "name 4",
        "epg_channel_id" => "ch444",
        "added" => "1505435915",
    ),
);
$arr2 = Array
 (
 0 => Array
    (
        "ch000" => "Um9jayBJbiBSaW8="
    ),
1 => Array
    (
        "ch111" => "Um9jayBJbiBSaW8="
    ),
2 => Array
    (
        "ch222" => "Um9jayBJbiBSaW8="
    ),
3 => Array
    (
        "ch333" => "Um9jayBJbiBSaW8="
    ),
4 => Array
    (
        "ch444" => "Um9jayBJbiBSaW8="
    ),
);
$new_array = array();
foreach($arr1 as $key=>$value)
{
    foreach($arr2 as $key1=>$value1)
    {
        foreach($value1 as $key2=>$value2)
        {
            if($key2 == $value['epg_channel_id'])
            {
                $value[$key2]=$value2;
            }
        }
    }
    $new_array[$key]=$value;
}
print_r($new_array);

DEMO

+1

array_key_exists ,

: https://eval.in/863359

$array = Array
(
    Array
    (
        'num' => 1,
        'name' => 'name 1',
        'epg_channel_id' => 'ch111',
        'added' => '1505435915',
    ),

    Array
    (
        'num' => 2,
        'name' => 'name 2',
        'epg_channel_id' => 'ch222',
        'added' => '1505435915',
    ),

    Array
    (
        'num' => 3,
        'name' => 'name 3',
        'epg_channel_id' => 'ch333',
        'added' => '1505435915',
    ),

    Array
    (
        'num' => 4,
        'name' => 'name 4',
        'epg_channel_id' => 'ch444',
        'added' => '1505435915'

    )
);
$array2 = Array
(
    Array
    (
        'ch000' => 'Um9jayBJbiBSaW8='
    ),

    Array
    (
        'ch111' => 'Um9jayBJbiBSaW8='
    ),

    Array
    (
        'ch222' => 'Um9jayBJbiBSaW8='
    ),

    Array
    (
        'ch333' => 'Um9jayBJbiBSaW8='
    ),

    Array
    (
        'ch444' => 'Um9jayBJbiBSaW8='
    )
);

$newArray =[];
foreach ($array as $key => $value) {
    foreach ($array2 as $key2 => $value2) {
        if (array_key_exists($value['epg_channel_id'], $value2)) {
            $value[$value['epg_channel_id']] = $value2[$value['epg_channel_id']];
        }
    }
    $newArray[] = $value;
}

echo "<pre>"; 
print_r($newArray);
+1

'epg_channel_id' 1 1 'ch111' array2

$ch_name = $array1[$i]['epg_channel_id'];
$id = $array1[$i]['num'];

$ch_value = $array2[$id]['$ch_name'];

$array1[$i]["$ch_name"] =  $ch_value;

foreach

0

array_merge_recursive , . . php.net

, , , , , . , , , , .

.

0

. , . .

foreach ($array1 as $key => $value){
       // echo $key;
        foreach ($array2 as $i =>$item){
            foreach ($item as $j=>$subitem){
                if($value['epg_channel_id'] == $j){
                    $array1[$key][$j] = $subitem;
            }
            }
        }
    }


print_r($array1);
0
$new_arr = [];
foreach($arr1 as $val){
    foreach($arr2 as $val2){
        if(array_key_exists($val['epg_channel_id'], $val2)){
            $val[$val['epg_channel_id']] = $val2[$val['epg_channel_id']];
            break;
        }
    }
    $new_arr[] = $val;
}
print_r($new_arr);
0

Source: https://habr.com/ru/post/1685838/


All Articles