используя foreach с многомерным массивом - PullRequest
1 голос
/ 09 мая 2011

В настоящее время я строю многомерный массив из своего ввода.вот так: (пример)

<form method=post action="testing.php">
<input name="response[0]['id']" type="hidden" value="<? echo $q1; ?>">
<input name="response[0]['answer']" type=text value=''>
<input name="response[1]['id']" type="hidden" value="<? echo $q2; ?>">
<input name="response[1]['answer']" type=text value=''>
<input name="response[2]['id']" type="hidden" value="<? echo $q3; ?>">
<input name="response[2]['answer']" type=text value=''>
<input name="response[3]['id']" type="hidden" value="<? echo $q4; ?>">
<input name="response[3]['answer']" type=text value=''>
<input type="submit" value="submit">
</form>

, чтобы он был успешно размещен.Однако я пытаюсь использовать foreach для распечатки значений, и я ошибаюсь.

EDIT мой выходной массив:

Array ( 
[0] => Array 
( 
['id'] => q1 
['answer'] => 1 
) 
[1] => Array 
( 
['id'] => q2 
['answer'] => 2 
) 
[2] => Array 
( 
['id'] => q3 
['answer'] => 3 
) 
[3] => Array 
( 
['id'] => q4 
['answer'] => 4 
)
) 

Может кто-нибудь объяснить, какя бы извлек значения с помощью foreach или даже лучше?

большое спасибо

Ответы [ 3 ]

3 голосов
/ 09 мая 2011
foreach ($_POST['response'] as $response) {
  echo $response['id'];
  echo $response['answer'];
}

Это должно сделать это.

0 голосов
/ 09 мая 2011

EDIT
Обратите внимание, что апос (') являются частью имени! Либо измените HTML (response[0][id]), либо выполните следующие действия.

Входящий массив должен выглядеть так:

$response = array(
    0 => array("'id'" => ..., "'answer'" => ...),
    1 => array("'id'" => ..., "'answer'" => ...),
    2 => array("'id'" => ..., "'answer'" => ...),
    3 => array("'id'" => ..., "'answer'" => ...),
);

Таким образом,

foreach ($response as $resp) {
    print 'ID=' . $resp["'id'"] . ', answer=' . $resp["'answer'"];
}

Проблема: <input name="response[0]['answer']" /> приведет к массиву с ключом 'answer'. То есть, буквальная строка с апосом, а не просто answer. Вам, вероятно, следует изменить HTML на <input name="response[0][answer]" />, чтобы избежать путаницы. Я попробую проверить, задокументировано ли это поведение. Это поведение указано в документации .

0 голосов
/ 09 мая 2011

это то, что вы пытаетесь сделать?

<?php foreach($response as $entry): ?>
    <input name="<?php echo $entry['id']; ?>" />
    <input name="<?php echo $entry['answer']; ?>" />
<?php endforeach; ?>

и, конечно, структурируйте входы так, как вы это делали, как указано выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...