Maison >développement back-end >tutoriel php >Comment calculer le produit cartésien des tableaux associatifs PHP tout en préservant les paires clé-valeur ?

Comment calculer le produit cartésien des tableaux associatifs PHP tout en préservant les paires clé-valeur ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 01:40:11787parcourir

How to Compute the Cartesian Product of PHP Associative Arrays While Preserving Key-Value Pairs?

Trouver un produit cartésien avec des tableaux associatifs PHP, en préservant les paires clé-valeur

Étant donné un tableau associatif avec plusieurs sous-tableaux représentant différents attributs, la tâche consiste à calculer le Produit cartésien tout en préservant les clés et leurs correspondantes valeurs.

Rationale

Pour un tableau $input avec N sous-tableaux, où chaque sous-tableau a Cn éléments, on peut procéder à l'induction :

  • Pour N = 1, le produit cartésien est simplement le tableau d'entrée lui-même.
  • En supposant que nous ayons le produit cartésien des N-1 premiers sous-tableaux, nous pouvons calculer le produit du Nième sous-tableau par :

    • Dans chaque élément (tableau) du produit, ajoutez la paire KN => VN,1.
    • Pour chaque valeur VN,2 à VN,CN, ajoutez une copie de chaque élément au produit, en changeant la valeur de KN en VN,m (pour tous 2 ≤ m ≤ CN).

Code

function cartesian($input) {
    $result = [];

    while (list($key, $values) = each($input)) {
        if (empty($values)) {
            continue;
        }

        if (empty($result)) {
            foreach ($values as $value) {
                $result[] = [$key => $value];
            }
        } else {
            $append = [];

            foreach ($result as &$product) {
                $product[$key] = array_shift($values);
                $copy = $product;

                foreach ($values as $item) {
                    $copy[$key] = $item;
                    $append[] = $copy;
                }

                array_unshift($values, $product[$key]);
            }

            $result = array_merge($result, $append);
        }
    }

    return $result;
}

Utilisation

$input = [
    'arm' => ['A', 'B', 'C'],
    'gender' => ['Female', 'Male'],
    'location' => ['Vancouver', 'Calgary'],
];

print_r(cartesian($input));

Produira le produit cartésien souhaité, en préservant les clés et valeurs :

Array
(
    [0] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Vancouver
        )

    [1] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Calgary
        )

    [2] => Array
        (
            [arm] => A
            [gender] => Male
            [location] => Vancouver
        )

...etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn