2014-09-23 88 views
1

您認爲如何在以下結構中洗牌多維數組的最佳方式是什麼,以便問答對是分隔隨機抽出一組問答對

$myArray = array(

    array('question' => 'q1', 'answer' => 'a1'), 
    array('question' => 'q2', 'answer' => 'a2'), 
    array('question' => 'q3', 'answer' => 'a3') 
    //... 
    //... 

); 

我需要做的是把這個:

q1-a1, q2-a2, q3-a3... 

到這一點:

q3-a2, q4-a3, q1-a9... 

我收到從試題庫這個數組。我想顯示問題 - 答案對,但明顯改變。我有一些解決方案在我的腦海中,只是好奇的方式來做到這一點;)

+0

期間選擇洗牌呢? – Ghost 2014-09-23 12:49:06

+0

不,因爲我需要正確的問題 - 答案對以便在需要時進行檢查。 – Serdar 2014-09-23 12:53:19

+0

然後使用'shuffle()'?似乎很直接 – Ghost 2014-09-23 12:53:57

回答

1

那麼你可以只是簡單的得到的問題和答案,他們洗牌,然後重新應用:

$q = $a = array(); 
foreach ($myArray as $value) { 
    $q[] = $value['question']; 
    $a[] = $value['answer']; 
} 

shuffle($q); 
shuffle($a); 

foreach($myArray as $key => &$value) { 
    $value['question'] = $q[$key]; 
    $value['answer'] = $a[$key]; 
} 

echo '<pre>'; 
print_r($myArray); 

你也可以使用array_collumn()(如果可用)(PHP 5> = 5.5.0):

$q = array_column($myArray, 'question'); 
$a = array_column($myArray, 'answer'); 
+0

這與我實際上做的很接近。 – Serdar 2014-09-23 13:58:30

+0

@Serdar確定男人很高興它幫助 – Ghost 2014-09-23 14:03:46

0

PHP有大量的內置array functions。使用這些功能的組合,您可以創建內部使用array_keys,array_values,shufflearray_combine的自定義隨機播放功能。請嘗試以下操作:

// Create a copy of the original array to key 
// for processing later... 
$originalArray = $myArray; 

function shuffleAll($myArray) { 
    // Pull the keys into an array and 
    // pull the values into another 
    // array... 
    $keys = array_keys($myArray); 
    $values = array_values($myArray); 

    // Shuffle the arrays independently... 
    shuffle($keys); 
    shuffle($values);   

    // Combine the arrays into one... 
    return array_combine($keys, $values); 
} 

$myArray = shuffleAll($myArray); 

$myArray現在應該有你現在不匹配的鍵值對自定義分類。原始值已保存在$originalArray中用於後期處理和匹配。

參考文獻:

array_combine(...)

array_keys(...)

array_values(...)

shuffle(...)

+0

你可以調用你的函數'shuffleAll'而不需要'$ myArray '參數。它也沒有給出預期的輸出。 – 2014-09-23 13:32:02

+0

@KeVin感謝您對參數的理解。它如何不能提供所需的輸出?根據OP的說法,「我想洗牌順序和配對,例如:q1-a2,q3-a4,q5-a1 ...」這是一個不是必需的例子。你在哪裏看到_「預期輸出」_... – War10ck 2014-09-23 13:32:46

+0

他想混合問題和答案:'q1-a2,q3-a4,q5-a1'。你的函數和'shuffle($ myArray)'一樣。 – 2014-09-23 13:35:17