2015-10-26 51 views
2

我有,用戶可以在7個不同的字段輸入數字,然後我使用如果數組值彼此匹配,則再次洗牌

shuffle($_POST); 

混淆的數字,然後形式顯示它們對數字它們所以輸出看起來像這樣:

1 1 
2 4 
3 6 
4 2 
5 7 
6 3 
7 5 

這是我使用的代碼。

<?php 
error_reporting(0); 
if ($_SERVER['REQUEST_METHOD']== "POST") { 
$array = implode("",$_POST); 
shuffle($_POST); 
} 
?> 
<div class="box"><?php echo $array[0]; ?> <?php echo $_POST[0]; ?></div><br> 
<div class="box"><?php echo $array[1]; ?> <?php echo $_POST[1]; ?></div><br> 
<div class="box"><?php echo $array[2]; ?> <?php echo $_POST[2]; ?></div><br> 
<div class="box"><?php echo $array[3]; ?> <?php echo $_POST[3]; ?></div><br> 
<div class="box"><?php echo $array[4]; ?> <?php echo $_POST[4]; ?></div><br> 
<div class="box"><?php echo $array[5]; ?> <?php echo $_POST[5]; ?></div><br> 
<div class="box"><?php echo $array[6]; ?> <?php echo $_POST[6]; ?></div><br> 

如何檢查兩個數組的值以確保它們不匹配。如果它們匹配,我想再次使用shuffle(),直到它們中的一個不匹配。我可能會使用if else語句再次運行代碼,直到數字不匹配,但不知道如何去處理它。

+0

在您的輸出示例中,第二列中的數字在第一列中不存在。這是正確的嗎 ? – Alexander

+0

我不小心使用了另一個例子,現在修復它 –

回答

3

在while循環中檢查array_intersect_assoc($array,$_POST);,直到它返回null數組,shuffle!

使用array_intersect_assoc()

$array = $_POST; 
do { 
    shuffle($_POST); 

} while ((count(array_intersect_assoc($array, $_POST))) !=0); 
+0

他們兩個都不適合我。不知道我做錯了什麼。這些數字有時候還會匹配 –

+0

我做了一些小改動。這是我犯的可變錯誤。如果問題仍然存在,請發佈您試過的代碼讓我檢查一下 – Thamilan

+0

這實際上是我的錯誤,所以使用aray_intersect_assoc()之前的代碼工作正常!我的問題是我的鑰匙沒有任何其他名稱,所以我忘了重置他們 –

1

,直到沒有剩下的比賽你可以寫一個輔助函數來測試,如果陣列有比賽,和洗牌。

function has_same_matches($arr1, $arr2) { 
    for($i=0, $sz = count($arr1); $i < $sz; ++$i) { 
     if ($arr1[$i] == $arr2[$i]) return true; 
    } 
    return false; 
} 

$array = [1,2,3,4,5,6,7]; 
$shuffled = $array; 

while(has_same_matches($array, $shuffled)) { 
    shuffle($shuffled); 
} 
1

我不確定你爲什麼要直接使用$ _POST,但無論如何,我認爲這靈魂應該適合你。 另請注意,shuffle()不保留數組鍵。

if ($_SERVER['REQUEST_METHOD']== "POST") { 
    $init_array = $_POST; 
    $array = implode("",$_POST); //user input 
    shuffle($_POST); 
    $after_shuffle = $_POST; 
    while($init_array == $after_shuffle){ 
     shuffle($_POST); 
    } 
    $final_array = $_POST; //array with unmatched values 
} 
+0

我試過這個,我改變了回聲代碼,但它沒有奏效。


- 他們有時還會匹配 –