Assoziative Arrays mit gemeinsamen Spaltenwerten zusammenführen
P粉966979765
P粉966979765 2023-11-09 08:47:41
0
2
635

Ich möchte zwei Arrays basierend auf gemeinsamen Spaltenwerten zusammenführen. Hier sind meine 2 Arrays:

$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"
    ]
];

Ich möchte diese Arrays zusammenführen, um Folgendes zu erhalten:

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',
  ),
)

Wie Sie sehen können, haben beide Arrays denselben Schlüssel ['category_id'] und denselben Wert.

Ich möchte ein Ergebnis erhalten, bei dem ['total_process_per_category'] und ['total_pinned_per_category'] basierend auf ihren ['category_id']-Werten zusammen im selben Array platziert werden.

Ich habe das mithilfe von „nested foreach“ erhalten, aber es sieht hässlich aus. Bitte sagen Sie mir einen besseren Weg.

P粉966979765
P粉966979765

Antworte allen(2)
P粉366946380

这可以在没有“丑陋的嵌套 foreach”的情况下完成。在迭代之前合并两个数组,按category_id 值进行分组。循环结束后,使用 array_values() 清除临时的一级键。

代码:(演示) (array_reduce() 版本)

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

输出:

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

你可以尝试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);
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage