Fusionner des tableaux associatifs avec des valeurs de colonnes partagées
P粉966979765
P粉966979765 2023-11-09 08:47:41
0
2
516

Je souhaite fusionner deux tableaux en fonction de valeurs de colonne communes. Voici mes 2 tableaux :

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

Je souhaite fusionner ces tableaux pour obtenir :

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

Comme vous pouvez le voir, les deux tableaux ont la même clé ['category_id'] et la même valeur.

Je souhaite obtenir un résultat où ['total_process_per_category'] et ['total_pinned_per_category'] sont placés ensemble sur le même tableau en fonction de leurs valeurs ['category_id'].

J'ai obtenu ceci en utilisant un foreach imbriqué mais ça a l'air moche. S'il vous plaît dites-moi une meilleure façon.

P粉966979765
P粉966979765

répondre à tous(2)
P粉366946380

Cela peut être fait sans "foreach imbriqué laid". Fusionnez les deux tableaux avant d'itérer, en les regroupant par valeurcategory_id. Une fois la boucle terminée, utilisez array_values() pour effacer les clés temporaires de premier niveau.

Code : (Démo) (array_reduce() version)

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

Sortie :

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

Vous pouvez essayer 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);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!