您认为在以下结构中对多维数组进行混洗的最佳方法是什么?因此,问题 - 答案对 分开 ?
$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 :(得分: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_keys
,array_values
,shuffle
和array_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(...)