Bagaimana cara menggabungkan dua atau lebih array di PHP tanpa kehilangan nilai jika kuncinya sama dan nilainya berbeda

Saya memiliki dua array multidimensi. Saya perlu menggabungkan keduanya tanpa kehilangan nilai apa pun yang memiliki kunci yang sama dan nilai berbeda. Inilah skenarionya:

Array1
(
    [0] => 11
    [2] => 12
    [3] => 13
    [4] => (
                [0] =>  100
                [1] =>  200
            )
    [5] => 2
    [6] => 3
)

Array2
(
    [0] => 11
    [2] => 12
    [3] => 13
    [4] => (
                [0] =>  400
                [1] =>  500
            )
    [5] => 2
    [6] => 3
)

Hasilnya seharusnya

Result
(
    [0] => 11
    [2] => 12
    [3] => 13
    [4] => (
                [0] =>  (
                            [0] => 100
                            [1] => 400
                        )
                [1] =>  (
                            [0] => 200
                            [1] => 500
                        )
            )
    [5] => 2
    [6] => 3
)

person s1lam8u    schedule 19.06.2015    source sumber
comment
Jadi... apa yang sudah kamu coba sampai sekarang?   -  person Federkun    schedule 19.06.2015
comment
kemungkinan duplikat PHP: gabungkan dua array sambil tetap menyimpan kunci pengindeksan ulang?   -  person vitr    schedule 19.06.2015
comment
itu hanya + operator, dan juga pertanyaan duplikat))   -  person vitr    schedule 19.06.2015
comment
kedua komentar itu tidak benar!   -  person codeneuss    schedule 19.06.2015
comment
saya telah mencoba Jika saya memiliki kunci & nilai di kedua array, hanya diperlukan satu indeks, Di bawah kode saya. $ar1 = array(warna =› array(favorit =› merah), 5); $ar2 = array(10, warna =› array(favorit =› merah, biru)); $hasil = array_merge_recursive($ar1, $ar2); gema ‹pra›; print_r($hasil); gema ‹/pra›   -  person s1lam8u    schedule 19.06.2015


Jawaban (3)


Inilah salah satu solusinya:

<?php
$arrayA = array(0 => 11, 2 => 12, 3 => 13, 4 => array(0 => 100, 1 => array(0 => 222),), 5 => 2, 6 => 3);
$arrayB = array(
    0 => 11,
    2 => 12,
    3 => 13,
    4 => array(
        0 => 100,
        1 => array(0 => array(0 => 'test1', 1 => 'test2'), 1 => array(0 => 'test1', 1 => 'test2'),),
    ),
    5 => 2,
    6 => 3
);


/**
 * @param $a
 * @param $b
 * @return array
 */
function array_merge_graceful($a, $b)
{
    $c = [];
    if (is_array($a) && is_array($b)) {
        foreach (array_merge(array_keys($a),array_keys($b)) as $i) {
            if (!array_key_exists($i, $a)) {
                $c[$i] = $b[$i];
            } elseif (!array_key_exists($i, $b)) {
                $c[$i] = $a[$i];
            } else {
                $c[$i] = array_merge_graceful($a[$i], $b[$i]);
            }
        }
    } else {
        if ($a <> $b) {
            $c = [$a, $b];
        } else {
            $c = $a;
        }
    }
    return $c;
}

var_dump(array_merge_graceful($arrayA, $arrayB));

?>
person codeneuss    schedule 19.06.2015
comment
Ini terbangun... Tapi karena skenario ini tidak berhasil, tolong bantu saya. $array1 = larik( 0 =› 11, 2 =› 12, 3 =› 13, 4 =› larik( 0 =› 100, 1 =› larik( 0 =› 222 ), ), 5 =› 2, 6 = › 3 ); $array2 = larik( 0 =› 11, 2 =› 12, 3 =› 13, 4 =› larik( 0 =› 100, 1 =› larik( 0 =› larik( 0 =› 'uji1', 1 =› 'test2' ), 1 =› larik( 0 =› 'test1', 1 =› 'test2' ), ), ), 5 =› 2, 6 =› 3 ); - person s1lam8u; 19.06.2015
comment
apa yang kamu harapkan sebagai hasilnya? - person codeneuss; 19.06.2015
comment
Saya memiliki respons API yang memberikan banyak objek dari itu, beberapa objek yang memiliki kunci yang sama dan nilai berbeda terkadang kunci dan nilai yang sama. Jadi saya perlu menggabungkan Tapi masalahnya saya tidak tahu apakah saya akan mendapatkan 2 dimensi atau 3 dimensi. Kadang-kadang saya harus menggabungkan 3 array. - person s1lam8u; 19.06.2015
comment
oke .. saya mengerti sekarang .. coba dan beri tahu saya apakah itu berhasil untuk Anda. - person codeneuss; 19.06.2015

Cobalah sesuatu seperti ini

<?php

$array1 = array(11, 12, 13, array(100, 200), 2, 3);
$array2 = array(11, 12, 13, array(400, 500), 2, 3);
echo "<pre>";
print_r($array1);
print_r($array2);

$combine = array();

foreach ($array1 as $key => $value) {
    if (array_key_exists($key, $combine)) {
        //if is array
        if (is_array($combine[$key])) {
            $combine[$key] = array($combine[$key], $value);
        }
    } else {
        $combine[$key] = $value;
    }
}

foreach ($array2 as $key => $value) {
    if (array_key_exists($key, $combine)) {
        //if is array
        if (is_array($combine[$key])) {
            $combine[$key] = array($combine[$key], $value);
        }
    } else {
        $combine[$key] = $value;
    }
}

echo "<hr>";
print_r($combine);
person Faiz Rasool    schedule 19.06.2015

gunakan fungsi array_merge_recursive() untuk menggabungkan array. Untuk lebih jelasnya silakan lihat http://php.net/manual/en/function.array-merge-recursive.php

person sonam gupta    schedule 19.06.2015
comment
Jika saya memiliki kunci & nilai di kedua array, hanya diperlukan satu indeks, Di bawah kode saya. $ar1 = array(warna =› array(favorit =› merah), 5); $ar2 = array(10, warna =› array(favorit =› merah, biru)); $hasil = array_merge_recursive($ar1, $ar2); gema ‹pra›; print_r($hasil); gema ‹/pra›; - person s1lam8u; 19.06.2015
comment
ini mungkin berfungsi dengan kunci string .. tetapi tidak dengan kunci integer... saya sudah mencobanya dengan array dari pertanyaan... tidak selalu rtfm - person codeneuss; 19.06.2015