2010-11-13 1 views
2

je une matrice représentée en PHP comme un tableau:Comment s'appelle l'opération "combiner chaque chaque"?

array(
    array('a','b'), // a | b 
    array('c','d') // c | d 
) 

et j'ai une deuxième matrice représentée d'une manière similaire (ici sans tableaux intérieurs, mais je ne me dérange pas de les ajouter):

array(
    'e',    // e 
    'f'    // f 
) 

Je voudrais avoir une combinaison comme ceci:

array(
    array('a','b','e'), // a | b | e 
    array('c','d','e') // c | d | e 
    array('a','b','f'), // a | b | f 
    array('c','d','f') // c | d | f 
) 

je tentais de trouver un extrait de code qui fait que pour moi, mais je a échoué parce que je ne » Je ne sais même pas si ce genre d'opération a un nom. A-t-il?

(Je ne veux pas que quiconque d'écrire cet extrait de code, je peux le faire moi-même.)

Répondre

2

Ce que vous cherchez est appelé le produit cartésien. Il n'y a pas de fonction PHP native pour le calculer.

+0

Je sais ce terme de la théorie SQL/set et trouvé certaines implémentations, mais aucun d'entre eux travaillaient si les éléments sur la gauche sont déjà commandés pa irs Accepté quand même. – AndreKR

+0

Si vous souhaitez une mise en œuvre, je serais heureux de suggérer un. Vous avez déclaré dans la question que vous n'en vouliez pas. – erisco

0

Juste au cas où quelqu'un d'autre ne veulent une mise en œuvre, ce qui suit pourrait créer un produit cartésien de deux tableaux:

$cartesian_product_values = array(); 
$cartesian_product_arrays = array(); 
foreach($array1 as $a1) { 
    foreach($array2 as $a2) { 
     //Concatenate values in arrays 
     $cartesian_product_values[] = $a1.$a2; 
     $cartesian_product_values[] = $a2.$a1; 
     //Or merge arrays 
     $cartesian_product_arrays[] = array_merge($a1, $a2); 
    } 
} 

Et en plus, si vous voulez que les valeurs de array1 $ et array2 $ dans le tableau final, vous pouvez fusionner les deux tableaux ensemble avant les boucles foreach imbriquées:

$cartesian_product = array_merge($array1, $array2); 
foreach($array1 as $a1) { 
    foreach($array2 as $a2) { 
     array_push($cartesian_product, $a1.$a2); 
     array_push($cartesian_product, $a2.$a1); 
    } 
}