洗牌一系列Q& A对

时间:2014-09-23 12:46:53

标签: php arrays multidimensional-array shuffle

您认为在以下结构中对多维数组进行混洗的最佳方法是什么?因此,问题 - 答案对 分开

$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...

我从问题数据库中获取此数组。我想显示问答对,但显然是洗牌。我脑子里有一些解决方案,只是因为聪明的方法而好奇;)

2 个答案:

答案 0 :(得分: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&gt; = 5.5.0):

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

答案 1 :(得分:0)

PHP有大量的内置array functions。使用这些函数的组合,您可以创建一个在内部使用array_keysarray_valuesshufflearray_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(...)