Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 5
Регистрация: 09.02.2014
Сообщений: 43
1

Перебор массива

23.05.2014, 15:35. Показов 1512. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно вот массив, с вопросами для тестов:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$questions = array(
    array(
        'title' => "Какой самый маленький континент?",
        'answers' => array(
            array(
                'answer' => "Антарктида",
                "correct" => false
            ),
            array(
                'answer' => "Австралия",
                "correct" => true
            ),
            array(
                'answer' => "Африка",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Какой формы планета Земля?",
        'answers' => array(
            array(
                'answer' => "Круглая",
                "correct" => true
            ),
            array(
                'answer' => "Овальная",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Как звали русского богатыря Муромца?",
        'answers' => array(
            array(
                'answer' => "Алёша",
                "correct" => false
            ),
            array(
                'answer' => "Добрыня",
                "correct" => false
            ),
            array(
                'answer' => "Илья",
                "correct" => true
            ),
            array(
                'answer' => "Емеля",
                "correct" => false
            )
        )
    ),
);
?>
И его нужно перебрать и вывести на экран, как тесты, то-есть:

Какой формы планета Земля?
  • Круглого
    Овального

И для каждого вопроса 1 вариант ответа, то-есть с помощью radiobuttom.

Вот мой основной код, который подгружает массив с вопросами из файла "questions.php" (код приведён выше), мой вариант перебора не действует:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<html>
    <head>
        <title>Web-Testing</title>
    </head>
<body style="background-color:#CCff66;">
    <font size='5' face='Arial_Black'>
        <?php
            echo "<form  method='post' action='results.php'>";
            $fp = fopen('questions.php', 'a');
            require_once(__DIR__ . '\questions.php');
 
            foreach ($questions as $id => $question)
            {
                echo $question."<br>";
                echo "<UL>";
                foreach ($question as $answerId => $k)
                {
                    echo "<input type='radio' name='$buttom_$id' value='$buttom_$answerId'> ";
                    echo $k."<br>";
                }
                echo "</UL>";
                echo "<br>";
            }
            echo "<center>";
            echo "<input name='submit' type='submit' value='Отправить'></form>";
            echo "</center>";
            fclose($fp);
        ?>
    </font>
</body>
</html>
Добавлено через 7 минут
Для наглядности вырежу сам перебор массива и прокомментирую.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
foreach ($questions as $id => $question)//цикл чтения массива, присваивает элементам $key (здесь - $id) и $value (здесь - $question)
{
     echo $question."<br>"; //должен выводить 'title' - сам вопрос.
     echo "<UL>"; // тег, что-бы объединить все ответы под одним вопросом. 
     foreach ($question as $answerId => $k)//цикл чтения массива, присваивает элементам $key (здесь - $answerId) и $value (здесь - $k)
     {
          echo "<input type='radio' name='$buttom_$id' value='$buttom_$answerId'> "; //кнопка выбора ответа
          echo $k."<br>"; //должен выводить сами ответы
     }
     echo "</UL>";//закрывающий тег
     echo "<br>";//новый абзац
}
Простите, что комменты корявые, как мог пытался объяснить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2014, 15:35
Ответы с готовыми решениями:

Перебор массива
Добрый день! Подскажите как можно получить значения массива между пустыми строками и занести в...

Перебор массива
Всем привет, как можно получить из такого используя print_r($mass_time); Array ( =&gt; Array ...

Перебор массива
Функция возвращает массив,вот такого вида Array ( =&gt; Array ( =&gt; 0...

Перебор массива
Здравствуйте, столкнулся с такой проблемой как перебор массива с помощью цикла Я пока что новичок...

10
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
23.05.2014, 15:53 2
В чем вопрос? или вы решили просто показать миру как вы выводите массив?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.05.2014, 16:12 3
Лучший ответ Сообщение было отмечено Devi1 как решение

Решение

Цитата Сообщение от Devi1 Посмотреть сообщение
name='$buttom_$id' value='$buttom_$answerId'
а откуда берутся эти переменные?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$i = 0;
foreach ($questions as $id => $question)
{
    echo $question['title'], '<br><ul>';
    foreach ($question['answers'] as $answer)
    {
        echo '<input type="radio" name="answer[', $i, ']" value="', $answer['answer'], '"> ';
        echo $answer['answer'], '<br>';
    }
    echo '</ul><br>';
    ++$i;
}
Добавлено через 2 минуты
Даже лучше будет так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$i = 0;
foreach ($questions as $id => $question)
{
    echo $question['title'], '<br><ul>';
    $j = 0;
    foreach ($question['answers'] as $answer)
    {
        echo '<input type="radio" name="answer[', $i, ']" value="', $j++, '"> ';
        echo $answer['answer'], '<br>';
    }
    echo '</ul><br>';
    ++$i;
}
Удобнее проверять будет, нечто наподобие такого
PHP
1
2
3
4
5
6
7
8
9
10
if(isset($_POST['answer']) && is_array($_POST['answer']))
{
    foreach($_POST['answer'] as $k => $v)
    {
        $correct = isset($questions[$k]['answers'], $questions[$k]['answers'][$v])
                    && $questions[$k]['answers'][$v]['correct'];
        echo 'Answer ', $k + 1, ' is ', ($correct ? 'right' : 'wrong'),
             ' (', $questions[$k]['answers'][$v]['answer'], ')<br>';
    }
}
1
3 / 3 / 5
Регистрация: 09.02.2014
Сообщений: 43
23.05.2014, 17:54  [ТС] 4
Цитата Сообщение от crautcher Посмотреть сообщение
В чем вопрос? или вы решили просто показать миру как вы выводите массив?
Вопрос в том, что у меня не получается перебрать массив и вывести его на экран.

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
Даже лучше будет так
Спасибо, большое за быстрый и рабочий ответ.

Добавлено через 28 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
Удобнее проверять будет, нечто наподобие такого
Этот участок кода работает, но все варианты ответов реагирует отрицательно.
Answer 1 is wrong
Answer 2 is wrong
Answer 3 is wrong
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
23.05.2014, 20:43 5
Цитата Сообщение от Devi1 Посмотреть сообщение
Этот участок кода работает, но все варианты ответов реагирует отрицательно.
Скопировал Ваш массив к себе в скрипт и 2 последние куска кода короля (добавил лишь <form method='post> ... </form>). Все работает верно.
0
3 / 3 / 5
Регистрация: 09.02.2014
Сообщений: 43
23.05.2014, 22:05  [ТС] 6
Цитата Сообщение от pav1uxa Посмотреть сообщение
Скопировал Ваш массив к себе в скрипт и 2 последние куска кода короля (добавил лишь <form method='post> ... </form>). Все работает верно.
Скажи, пожалуйста, куда "<form method='post> ... </form>" вставить?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.05.2014, 22:45 7
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<html>
    <head>
        <title>Web-Testing</title>
    </head>
<body style="background-color:#CCff66;">
    <font size='5' face='Arial_Black'>
<form method="post">
<?php
$i = 0;
foreach ($questions as $question)
{
    echo $question['title'], '<br><ul>';
    $j = 0;
    foreach ($question['answers'] as $answer)
    {
        echo '<input type="radio" name="answer[', $i, ']" value="', $j++, '"> ';
        echo $answer['answer'], '<br>';
    }
    echo '</ul><br>';
    ++$i;
}
?>
<center>
    <input name='submit' type='submit' value='Отправить'>
</center>
</form>
 
<br><br>
<?php
if(isset($_POST['answer']) && is_array($_POST['answer']))
{
    foreach($_POST['answer'] as $k => $v)
    {
        $correct = isset($questions[$k]['answers'], $questions[$k]['answers'][$v])
                    && $questions[$k]['answers'][$v]['correct'];
        echo 'Answer ', $k + 1, ' is ', ($correct ? 'right' : 'wrong'),
             ' (', $questions[$k]['answers'][$v]['answer'], ')<br>';
    }
}
1
3 / 3 / 5
Регистрация: 09.02.2014
Сообщений: 43
23.05.2014, 23:09  [ТС] 8
Цитата Сообщение от Devi1 Посмотреть сообщение
Скопировал Ваш массив к себе в скрипт и 2 последние куска кода короля (добавил лишь <form method='post> ... </form>). Все работает верно
Всмысле, что у меня стоит "echo "<form method='post' action='results.php'>";" в главном текстовике, это видно на первом коде. код всё равно не работает.

Добавлено через 5 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
Код PHPHTML
Прошу прощения, но всё равно, ответ всегда отрицателен.

Добавлено через 8 минут
вот мой файл 'index.php', в нём не много отличий, от вашего текста, но мой куратор сказал поправить текст и сделать именно так.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<html>
    <head>
        <title>Web-Testing</title>
    </head>
<body style="background-color:#CCff66;">
    <font size='5' face='Arial_Black'>
        <?php
            echo '<form  method="post" action="results.php">';
            $fp = fopen('questions.php', 'a');
            require_once(__DIR__ . '\questions.php');
            foreach ($questions as $title_id => $question)
            {
                echo $question['title']. "<br>";
                echo "<ul>";
                foreach ($question['answers'] as $answer_id => $answer)
                {
                   echo '<input type="radio" name="question_' . $title_id . '" value="' . $answer_id . '">';
                   echo $answer['answer']."<br>";
                }
                echo "</ul>";
                echo "<br>";
            }
            //var_dump($questions);
            echo "<center>";
            echo "<input name='submit' type='submit' value='Отправить'></form>";
            echo "</center>";
            fclose($fp);
        ?>
    </font>
</body>
</html>
Вопросы берутся с файла 'questions.php'
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$questions = array(
    array(
        'title' => "Какой самый маленький континент?",
        'answers' => array(
            array(
                'answer' => "Антарктида",
                "correct" => false
            ),
            array(
                'answer' => "Австралия",
                "correct" => true
            ),
            array(
                'answer' => "Африка",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Какой формы планета Земля?",
        'answers' => array(
            array(
                'answer' => "Круглая",
                "correct" => true
            ),
            array(
                'answer' => "Овальная",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Как звали русского богатыря Муромца?",
        'answers' => array(
            array(
                'answer' => "Алёша",
                "correct" => false
            ),
            array(
                'answer' => "Добрыня",
                "correct" => false
            ),
            array(
                'answer' => "Илья",
                "correct" => true
            ),
            array(
                'answer' => "Емеля",
                "correct" => false
            )
        )
    ),
);
?>
Ну и кнопка 'Отправить' отправляет форму на ссылку из этого файла 'results.php', вот собственно в него я и запихиваю код для получения количества правильных и неправильных ответов.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<body style="background-color:#CCff66;">
    <font size='5' face='Arial_Black'>
    <center>
        <?php
            echo "<form  method='post' action='index.php'>";
            echo "Ваш результат:";
            echo "<br><br>    ";
            if(isset($_POST['answer']) && is_array($_POST['answer']))
            {
                foreach($_POST['answer'] as $k => $v)
                {
                    $correct = isset($questions[$k]['answers'], $questions[$k]['answers'][$v])
                    && $questions[$k]['answers'][$v]['correct'];
                    echo 'Answer ', $k + 1, ' is ', ($correct ? 'right' : 'wrong'),
                    '(', $questions[$k]['answers'][$v]['answer'], ')<br>';
                }
            }
            echo "<br>"."<br>"."<input name='submit' type='submit' value='Ещё раз'></form>";
        ?>
    </center>
    </font>
</body>
</html>
Добавлено через 1 минуту
Конечно ошибка была до того, как я изменил ваш вариант файла 'index.php', но она остаётся, при любых изменениях. Простите, я наверное всем надоел, но не могли бы вы ещё раз взглянуть ан код?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.05.2014, 10:20 9
Лучший ответ Сообщение было отмечено Devi1 как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<html>
    <head>
        <title>Web-Testing</title>
    </head>
<body style="background-color:#CCff66;">
    <font size='5' face='Arial_Black'>
<form method="post">
<?php
$questions = array(
    array(
        'title' => "Какой самый маленький континент?",
        'answers' => array(
            array(
                'answer' => "Антарктида",
                "correct" => false
            ),
            array(
                'answer' => "Австралия",
                "correct" => true
            ),
            array(
                'answer' => "Африка",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Какой формы планета Земля?",
        'answers' => array(
            array(
                'answer' => "Круглая",
                "correct" => true
            ),
            array(
                'answer' => "Овальная",
                "correct" => false
            )
        )
    ),
    array(
        'title' => "Как звали русского богатыря Муромца?",
        'answers' => array(
            array(
                'answer' => "Алёша",
                "correct" => false
            ),
            array(
                'answer' => "Добрыня",
                "correct" => false
            ),
            array(
                'answer' => "Илья",
                "correct" => true
            ),
            array(
                'answer' => "Емеля",
                "correct" => false
            )
        )
    ),
);
 
$i = 0;
foreach ($questions as $question)
{
    echo $question['title'], '<br><ul>';
    $j = 0;
    foreach ($question['answers'] as $answer)
    {
        echo '<input type="radio" name="answer[', $i, ']" value="', $j++, '"> ';
        echo $answer['answer'], '<br>';
    }
    echo '</ul><br>';
    ++$i;
}
?>
<center>
    <input name='submit' type='submit' value='Отправить'>
</center>
</form>
 
<br><br>
<?php
if(isset($_POST['answer']) && is_array($_POST['answer']))
{
    foreach($_POST['answer'] as $k => $v)
    {
        $correct = isset($questions[$k]['answers'], $questions[$k]['answers'][$v])
                    && $questions[$k]['answers'][$v]['correct'];
        echo 'Answer ', $k + 1, ' is ', ($correct ? 'right' : 'wrong'),
             ' (', $questions[$k]['answers'][$v]['answer'], ')<br>';
    }
}
Перебор массива
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.05.2014, 10:21 10
Цитата Сообщение от Devi1 Посмотреть сообщение
отправляет форму на ссылку из этого файла 'results.php'
*телепатирую* В этом файле просто нет массива $questions..?
1
3 / 3 / 5
Регистрация: 09.02.2014
Сообщений: 43
24.05.2014, 12:21  [ТС] 11
Спасибо большое, очень помогло.
0
24.05.2014, 12:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2014, 12:21
Помогаю со студенческими работами здесь

Перебор массива
Привет. Есть массив $user = array(); foreach($config as $form_id){ $user =...

Перебор массива в Smarty
Всем привет! Подскажите, пожалуйста как в Smarty перебрать массив таким образом, чтобы первое...

Перебор Многомерного массива
Уважаемые помогите перебрать многомерный массив if($qrand1){ ...

Перебор массива $_FILES
Здравствуйте. Подскажите, что я делаю не так? Почему я получаю ошибку неопределенного индекса....

Перебор массива foreach
Здравствуйте, есть необходимость изменить значение неких элементов внутри массива. Массив такой: (...

Перебор массива циклом
Добрый день. Столкнулся с такой проблемой как перебор массива циклом. Долгое время не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru