Rumah  >  Soal Jawab  >  teks badan

Gabungkan tatasusunan bersekutu dengan nilai lajur yang dikongsi

Saya ingin menggabungkan dua tatasusunan berdasarkan nilai lajur biasa. Berikut ialah 2 tatasusunan saya:

$array1 = [
    [
        "total_process_per_category" => "6",
        "category_id" => "1"
    ],
    [
        "total_process_per_category" => "2",
        "category_id" => "2"
    ]
];

$array2 = [
    [
        "total_pinned_per_category" => "16",
        "category_id" => "1"
    ],
    [
        "total_pinned_per_category" => "4",
        "category_id" => "2"
    ]
];

Saya mahu menggabungkan tatasusunan ini untuk mendapatkan:

array (
  0 => 
  array (
    'total_process_per_category' => '6',
    'total_pinned_per_category' => '16',
    'category_id' => '1',
  ),
  1 => 
  array (
    'total_process_per_category' => '2',
    'total_pinned_per_category' => '4',
    'category_id' => '2',
  ),
)

Seperti yang anda lihat, kedua-dua tatasusunan mempunyai kunci yang sama ['id_kategori'] dan nilai yang sama.

Saya ingin mendapatkan hasil di mana ['total_process_per_category'] dan ['total_pinned_per_category'] diletakkan bersama pada tatasusunan yang sama berdasarkan nilai ['category_id'] mereka.

Saya mendapat ini menggunakan nested foreach tetapi ia kelihatan hodoh. Tolong beritahu saya cara yang lebih baik.

P粉966979765P粉966979765368 hari yang lalu597

membalas semua(2)saya akan balas

  • P粉366946380

    P粉3669463802023-11-10 00:52:21

    Ini boleh dilakukan tanpa "foreach bersarang hodoh". Cantumkan dua tatasusunan sebelum lelaran, kumpulkan mengikut nilai category_id. Selepas gelung tamat, gunakan array_values() untuk mengosongkan kunci peringkat pertama sementara.

    Kod: (Demo) (array_reduce() versi)

    $result = [];
    foreach (array_merge($array1, $array2) as $row) {
        $result[$row['category_id']] = ($result[$row['category_id']] ?? []) + $row;
    }
    var_export(array_values($result));

    Keluaran:

    array (
      0 => 
      array (
        'total_process_per_category' => '6',
        'category_id' => '1',
        'total_pinned_per_category' => '16',
      ),
      1 => 
      array (
        'total_process_per_category' => '2',
        'category_id' => '2',
        'total_pinned_per_category' => '4',
      ),
    )

    balas
    0
  • P粉071743732

    P粉0717437322023-11-10 00:45:48

    Boleh cuba array_reduce:

    $someVariable = 'someValue';
    $result = array_reduce(array_merge($array1, $array2), function ($carry, $item) use ($someVariable) {
        if (isset($carry[$item['category_id']])) {
            $carry[$item['category_id']] = array_merge($carry[$item['category_id']], $item);
        } else {
            $carry[$item['category_id']] = $item;
        }
        return $carry;
    }, array());
    
    var_dump($result);

    balas
    0
  • Batalbalas