Перемешать массив пар Q & A

Как вы думаете, как лучше перетасовать многомерный массив в следующей структуре, так что пары вопрос-ответ отделенный?

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

Я получаю этот массив из базы данных вопросов. Я хочу отобразить пары вопросов и ответов, но, очевидно, перетасовал. У меня есть несколько решений, просто любопытные умные способы сделать это;)

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');
1

Другие решения

PHP имеет множество встроенных функции массива. Используя комбинацию этих функций, вы можете создать собственную функцию случайного воспроизведения, которая использует 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(...)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector