2017-08-07 135 views
0

我正在通過查找給定的數組數組的交集來查看構建新數組。查找數組的交集並創建一組新數組

對於大多數人來說,這可能是一個簡單的集合論問題,但對於我來說,這種問題很難包圍我。

所以我有一個鍵的數組:

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

而且我們的目標是,如果他們有一個路口建立與前一陣的拼接鍵鍵入的一個全新的數組:

基本上是這樣的:

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

由於ARRAY1,數組2,ARRAY3在命令具有ABC它們將形成爲一體的帶鍵陣列,相同數組2,ARRAY3,array4等。

我試圖用array_intersect進行實驗,但它看起來像它不是我正在尋找或者我可能以非常錯誤的方式解決它。任何想法都非常感謝。

$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

的問題是沒有完全確定。不應該'$ newArray'還包含值爲'[]'的鍵'array1,array4'和值爲'[A,B,C,D]'的鍵''array2,array3''等等。 – axiac

+0

'array2,array3'不包含在內,因爲它的所有元素都存在於array1,array2,array3和array2,array3,array4中,儘管在集合論中一個空集也被認爲是一個新條目 – XDProgrammer

回答

2

此代碼將給出所需的數組作爲輸出。

$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); 

出看跌期權

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

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

) 
+0

這就是令人印象深刻的,!謝謝 – XDProgrammer

相關問題