Сообщения об ошибках довольно очевидны. Вы не можете передать значение в shuffle
, только в переменную. Во-вторых, shuffle
принимает массив, а не объект, поэтому, когда вы json_decode($options)
, вам нужно передать true
в качестве второго параметра, чтобы он возвращал массив. Обратите внимание, что поскольку ваш $options
является ассоциативным массивом, shuffle
не будет работать для вас, поскольку он переиндексирует массив с помощью цифровых клавиш. Вместо этого вы можете использовать uasort
, чтобы перетасовать его:
$answers = '{"0":"2","1":"3"}';
$answers = json_decode($answers, true);
$options = '{"opt1":"4 Billion","opt2":"5 Billion","opt3":"6 Billion","opt4":"7 Billion"}';
$options = json_decode($options, true);
uasort($options, function ($a, $b) {
return rand(-1, 1);
});
foreach ($options as $key => $value) {
echo $value;
if (in_array(substr($key, -1), $answers)) {
// correct options
echo "<input type='checkbox' value='".substr($key, -1)."'>" . PHP_EOL;
} else {
// wrong options
echo "<input type='checkbox' value='".substr($key, -1)."'>" . PHP_EOL;
}
}
Вывод (случайный):
4 Billion<input type='checkbox' value='1'>
5 Billion<input type='checkbox' value='2'>
7 Billion<input type='checkbox' value='4'>
6 Billion<input type='checkbox' value='3'>
Демонстрация по dbfiddle