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
Libérer: 2024-12-27 01:40:11
original
840 Les gens l'ont consulté

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;
}
Copier après la connexion

Utilisation

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

print_r(cartesian($input));
Copier après la connexion

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.
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal