"6",category_id"=>"1"],["total_process_per_category"=>"2",ca"> Assoziative Arrays mit gemeinsamen Spaltenwerten zusammenführen-Fragen und Antworten zum chinesischen PHP-Netzwerk
Assoziative Arrays mit gemeinsamen Spaltenwerten zusammenführen
P粉966979765
P粉966979765 2023-11-09 08:47:41
0
2
458

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
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!