if (false === $pos) { // No order of answers is given, so use the default
$state->options->order = array_keys($question->options->answers);
} else { // Restore the order of the answers
- $state->options->order = explode(',', substr($state->responses[''], 0,
- $pos));
+ $state->options->order = explode(',', substr($state->responses[''], 0, $pos));
$state->responses[''] = substr($state->responses[''], $pos + 1);
}
// Restore the responses
// the $state->responses array is indexed by the answer ids and the
// values are also the answer ids (i.e. key = value).
if (empty($state->responses[''])) { // No previous responses
- if ($question->options->single) {
- $state->responses = array('' => '');
- } else {
- $state->responses = array();
- }
+ $state->responses = array('' => '');
} else {
if ($question->options->single) {
$state->responses = array('' => $state->responses['']);
// Question types may wish to override this (eg. to ignore trailing
// white space or to make "7.0" and "7" compare equal).
- return $state->responses === $teststate->responses;
+ // In php neither == nor === compare arrays the way you want. The following
+ // ensures that the arrays have the same keys, with the same values.
+ $result = false;
+ $diff1 = array_diff_assoc($state->responses, $teststate->responses);
+ if (empty($diff1)) {
+ $diff2 = array_diff_assoc($teststate->responses, $state->responses);
+ $result = empty($diff2);
+ }
+
+ return $result;
}
/**