Rumah > Soal Jawab > teks badan
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粉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', ), )
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);