2017-04-14 55 views
0

我在組合數組值時遇到了問題。我試圖將它們結合起來,並配對一些我已經做過的事情,但是我想擦除一些我不想要的對。請有人幫助我實現這一目標。組合數組值而不與數組中的前一元素配對

// the Code I have now is: 
$inputarray = array('Mussafiri', 'Fire', 'Ubungo', 'Mbezi'); 
$outputarray = array(); 
    $i = 0; 
    foreach($inputarray as $values) { 
     $j = 0;  
     foreach($inputarray as $values2) { 
     if($values != $values2){  
      $outputarray[] = array($values => $values2); 
     }   
     $j++;  
    }  
$i++; 
} 
print_r($outputarray); 

//Output array is: 
     Array ( [0] => Array ([Mussafiri] => Fire) 
       [1] => Array ([Mussafiri] => Ubungo) 
       [2] => Array ([Mussafiri] => Mbezi) 
       [3] => Array ([Fire] => Mussafiri) 
       [4] => Array ([Fire] => Ubungo) 
       [5] => Array ([Fire] => Mbezi) 
       [6] => Array ([Ubungo] => Mussafiri)          
       [7] => Array ([Ubungo] => Fire) 
       [8] => Array ([Ubungo] => Mbezi) 
       [9] => Array ([Mbezi] => Mussafiri) 
       [10] => Array ([Mbezi] => Fire) 
       [11] => Array ([Mbezi] => Ubungo)) 

NOTE: I DO NOT WANT THE FOLLOWING PAIRS TO APPEAR, I want element to pair with the next element and not pair with the previous element so i do not like index 3,6,7,8,9,10 and 11 to appear in the pair list i.e 
        [3] => Array ([Fire] => Mussafiri)      
        [6] => Array ([Ubungo] => Mussafiri) 
        [7] => Array ([Ubungo] => Fire) 
        [8] => Array ([Ubungo] => Mbezi) 
        [9] => Array ([Mbezi] => Mussafiri) 
        [10] => Array ([Mbezi] => Fire) 
        [11] => Array ([Mbezi] => Ubungo) 

回答

0

如果我理解正確你想創建一個從陣列中的所有唯一對,在這種情況下,這樣的事情應該工作:

$pairs = array(); 
foreach ($inputarray as $key => $value) { 
    for ($i = $key + 1; isset($inputarray[$i]); $i++) { 
    $pairs[] = array($value => $inputarray[$i]); 
    } 
} 

for循環設置$i作爲的關鍵當前數組元素+1,所以它永遠不會引用它自己,並且永遠不會引用任何以前的數組成員。

+0

謝謝@billyonecan,這對我很有用,完全符合我的情況**感謝您的幫助**它有助於這個家庭 –

0
for($i=0; $i<$inputarray.length;$i++){ 
    $k=$i+1; 
    for($j=$k; $j<$inputarray.length;$j++){  
     $outputarray[] = array($inputarray[$i] => $inputarray[$j]); 

    } 
}