Gabungkan tatasusunan bersekutu dengan nilai lajur yang dikongsi
P粉966979765
P粉966979765 2023-11-09 08:47:41
0
2
591

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粉966979765
P粉966979765

membalas semua(2)
P粉366946380

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粉071743732

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);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!