2015-01-30 3 views
1

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

$Questions = array(
1 => array(
    'Question' => 'Second question', 
    'Answers' => array(
     'A' => 'First answer of Second question', 
     'B' => 'Second answer Second question', 
     'C' => 'Third answer Second question' 
    ), 
    'CorrectAnswer' => 'C' 
) 
); 

Как отредактировать значение «CorrectAnswer»? На самом деле, я имею в виду значение «С» (в этом случае это будет «Третий ответ Второй вопрос»). $ Value ['CorrectAnswer'] дает мне «C». Но я не могу просто отозваться «C», потому что в каждом массиве правильный ответ отличается. Я уверен, что это действительно просто, но это ускользает от меня. Извините, если я не объясню это правильно. Это другая часть кода:

foreach ($Questions as $QuestionNo => $Value) 
{ 
    if ($Answers[$QuestionNo] != $Value['CorrectAnswer']) 
{ 
     echo 'Your answer: <span style="color: red;">'.$Value['Answers'][$Answers[$QuestionNo]].'</span><br /> 
Correct answer: <span style="color: green;">'.$Value['CorrectAnswer'].'</span>';       
    } 
} 
+1

Плохая практика, чтобы назвать ваши переменные с заглавной буквой. Обычно имена классов получают капитал первой буквы. Но все-таки, это ваш выбор :) – Whirlwind

+0

@ Вихрь: да, должен быть camelCase, не так ли? –

+0

Точно ... Или вы можете использовать символы подчеркивания. – Whirlwind

ответ

1

Вы использовали бы значение для CorrectAnswer как ключ поиска Ответы:

echo $Questions[1]['Answers'][$Questions[1]['CorrectAnswer']]; 

Или в контексте вашего примера кода, который обхват через $Questions массива:

foreach ($Questions as $questionNo => $value) { 
    $answerGiven = $answers[$questionNo]; 
    $correctAnswer = $value['Answers'][$value['CorrectAnswer']]; 
    if ($answerGiven !== $correctAnswer) { 
     echo 'Your answer: <span style="color: red;">' . $answerGiven . '</span>'; 
     echo '<br />'; 
     echo 'Correct answer: <span style="color: green;">' . $correctAnswer . '</span>'; 
    } 
} 

Обратите внимание, что я вычищен код, чтобы сделать его более удобным для чтения. Вы задаете ответ и правильный ответ на переменные, а затем используете их для принятия решений и вывода. Я также правильно отпечатал код, чтобы сделать его более читаемым.

Я бы предостерег вас от использования начальных шапок для именования переменных (или имен ассоциативного массива) в PHP, поскольку это ОЧЕНЬ нестандартно.

1

Значение $Value['CorrectAnswer'] будет "C", так что вы можете использовать его, например, так:

echo $Value['Answers'][$Value['CorrectAnswer']]; 
+1

Спасибо, вот и все. Итак, что это такое, используется значение «CorrectAnswer» как позиция массива «Ответы», который нужно откликнуться? –

+0

@KardNails Да, это было бы так, как если бы вы сказали: '$ Value ['Answers'] ['C'];' –

1

Вы ищете что-то вроде

echo 'Correct answer: <span style="color: green;">'.$Value['Answers'][$Value['CorrectAnswer']].'</span>'; 
1

Вы спрашиваете, для этого:

$Value['Answers'][$Value['CorrectAnswer']] 

Это должно дать вам: «Третий ответ Второй вопрос:»

(ну, только в том случае, когда $ Значение ссылается на 1-й массив в $ Вопросы массива, то есть.)

+0

Это должно быть '$ Value', а не' $ value'. И разве я не дал это в качестве ответа? –

+0

Ну, это асинхронный интернет для вас! Мы ответили одновременно. И вы правы, это должно быть значение $ Value. Я исправлю это. –

+0

Собственно, об асинхронных вещах. Вы размещены примерно за 6 минут до меня, так что да, это повторяется. Тем не менее, я не видел вашего сообщения до того, как я опубликовал сообщение, из-за обновления, я уверен. Иначе я бы не отправил повторный ответ. –