2017-08-07 2 views
0

Je recherche la construction d'un nouveau tableau en recherchant l'intersection d'un tableau donné de tableaux.Recherche des intersections de array et création d'un nouvel ensemble de tableaux

C'est probablement un problème simple de théorie des ensembles pour la plupart des gens, mais c'est assez difficile pour moi de m'en faire une idée.

J'ai donc un tableau clé:

$myArray = [ 
'array1' => [A, B, C], 
'array2' => [A, B, C, D], 
'array3' => [A, B, C, D], 
'array4' => [D], 
] 

Et l'objectif est de construire un tableau entièrement nouveau calée avec les clés concaténées du tableau précédent si elles ont une intersection:

En gros comme ça :

$newArray = [ 
    'array1,array2,array3' => [A, B, C], 
    'array2,array3,array4' => [D] 
    ] 

Depuis array1, array2, ont array3 ABC commande ils formeront comme une matrice à clé, même que array2, array3, array4 et ainsi de suite.

J'ai essayé d'expérimenter avec array_intersect mais il semble que ce ne soit pas celui que je cherche ou peut-être que je ne le résolve pas vraiment. Toutes les idées sont très appréciées.

$myArray = [ 
'array1' => [A, B, C], 
'array2' => [A, B, C, D], 
'array3' => [A, B, C, D], 
'array4' => [D], 
]; 


$newArray = []; 
$keys = array_keys($myArray); 

for($i = 0, $size = count($myArray); $i < $size; $i++){ 
    for($k = $i; $k < $size; $k++){ 
     print_r(array_intersect($myArray[$keys[$i]], $myArray[$keys[$k]]));  
    } 
} 

    //Foal 
    // 'array1,array2,array3' => [A, B, C] 
    // 'array2,array3,array4' => [D] 
+0

La question n'est pas complètement défini. Should $ newArray ne devrait-il pas contenir la clé ''array1, array4'' avec la valeur' [] 'et la clé'' array2, array3'' avec la valeur '[A, B, C, D]' etc? – axiac

+0

'array2, array3' n'est pas inclus puisque tous ses éléments existent déjà dans' array1, array2, array3' et 'array2, array3, array4', bien que dans la théorie des ensembles, un ensemble vide soit également considéré comme une nouvelle entrée – XDProgrammer

Répondre

2

Ce code donnera le tableau désiré en sortie.

$myArray = [ 
'array1' => ['A', 'B', 'C'], 
'array2' => ['A', 'B', 'C', 'D'], 
'array3' => ['A', 'B', 'C', 'D'], 
'array4' => ['D'], 
]; 
// Define new arrays 
$newArray = []; 
$finalArray = []; 

// loop the array and create a new array with values like (A,B,C..) as keys 
foreach($myArray as $key=>$value){ 
    foreach($value as $k=>$v){ 
     // if already value exists append new value with comma 
     $newArray[$v] = isset($newArray[$v]) ? $newArray[$v].','.$key:$key; 
    } 
} 
foreach($newArray as $key=>$value){ 
     $finalArray[$value][] = $key; 

} 
print_r($finalArray); 

Out est mis

Array 
(
    [array1,array2,array3] => Array 
     (
      [0] => A 
      [1] => B 
      [2] => C 
     ) 

    [array2,array3,array4] => Array 
     (
      [0] => D 
     ) 

) 
+0

impressionnant,! Je vous remercie – XDProgrammer