Допустим, у меня есть php-хэш с вопросами в качестве ключей для подэшей, которые имеют ответы в качестве ключей к их значениям правильности:
$questions = array(
//1
"What?" => array(
"Answer A" => "false",
"Answer B" => "false",
"Answer C" => "true",
"Answer D" => "false",
"expl" => "**C is the correct answer."//also holds the explanations of these questions
),
"When?" => array(
"Answer A" => "false",
"Answer B" => "false",
"Answer C" => "false",
"Answer D" => "true",
"expl" => "**D is the correct answer, because..."),
...
...
...
//12
"How?" => array(
"Answer A" => "true",
"Answer B" => "false",
"Answer C" => "false",
"Answer D" => "false",
"expl" => "**A is the correct answer.")
);
Я хочу вывести только подпоследовательность этих вопросов, основываясь на том, что предыдущая информация пользователя использовала эту функцию:
function checkpoint($type){
global $questions;
//defined the subsequences for each type
$sub1 = array(1, 3, 4, 9, 5, 6, 10, 8, 11, 12);
$sub2 = array(1, 3, 4, 9, 5, 6, 10, 8, 11, 12);
$sub3 = array(1, 2, 3, 4, 12, 6, 10, 7, 8);
switch($type){
case 1: $questionpath = $sub1; break;
case 2: $questionpath = $sub2; break;
default: $questionpath = $sub3;
}
$q_strings = array_keys($questions);
$letters = range('A', 'Z');
//output
for($i = 0; $i < count($questionpath); $i++){
$qnum = $questionpath[$i] - 1; //the index of the question
$question = array_keys($questions)[$qnum];
$answers = array_keys($questions[$question]);echo '<table><tr><td>'.($i+1).'</td>
<td>'.$question.'</td>
</tr></table>';
for($j = 0; $j < count($answers); $j++){
if($answers[$j] != "expl")
echo '<input type="radio" name="q'.($i+1).'" id="q'.($i+1).'a'.($j+1).'" onchange="showAnswer($(\'#correct'.($i+1).'\'),'.$questions[$question][$answers[$j]].');"><label for="q'.($i+1).'a'.($j+1).'">'.range('A', 'Z')[$j].'. '.$answers[$j].'</label></br />';
}
echo '<span id="correct'.($i+1).'" class="correct"><i>'.$questions[$question]['expl'].'</i></span>
<span class="correct"><i>'.$questions[$question]['expl'].'</i></span>
</div>
<br />';
}
}
Наличие этой функции в файле «.inc» сработало на моем локальном сервере, но наличие ее на работающем сервере вызывает 403 ошибки.
Однако изменив код, чтобы не было многомерного доступа, вот так:
$q_arr = $questions[$question];
и изменение доступа как:
$questions[$question][$answers[$j]]
что-то вроде:
$q_arr[$ans]
исправил эти 403 ошибки. Итак, возможно ли, что серверы могут выдавать 403 ошибки, просто имея код, который обращается к многомерным массивам?
Задача ещё не решена.
Других решений пока нет …