Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
1

Вывод результатов тестирования

28.09.2016, 19:59. Показов 2876. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане! Подскажите по выводу результатов тестирования.
У меня есть
1 - массив $_POST , который выводит вопросы и ответы, выбранные, пользователем
2 - массив $result, который присваивает ответам вес от 5 до одного (15 вопросов и на каждый 5 ответов весом от 1 до 5),
3 - массив $test_all_data_result выводит весь массив теста, в т.ч. с номером ответа пользователя.
Я вывел через $result, например для 6 и 7 вопроса
[6] => Array
( [26] => 5 [27] => 4 [28] => 3 [29] => 2 [30] => 1 )
[7] => Array
( [31] => 5 [32] => 4 [33] => 3 [34] => 2 [35] => 1 ) - вес каждого ответа
и через $_POST у меня есть номера ответов, которые дал пользователь на 6,7 вопрос
Array ( [6] => 28 ), Array ( [7] => 32 ).
Вопрос : как мне записать функцию $weight_answer_summ = 0; // сумма весов ответов.
то есть на выходе мне должно выдать число 3+4 = 7 ( поскольку [28] => 3 и [32] => 4). Значит пользователь набрал суммарно 7 баллов
я не знаю, или через foreach нужно или как-то еще указать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 19:59
Ответы с готовыми решениями:

ТЕСТ - считывание данных из файла, вывод результатов тестирования
Зарание СПАСИБО!!! парни и девушки помогите пожалуйста очень нужно... нужна небольшая программа...

Подсчет результатов тестирования php
Здраствуйте, я вывожу тесты с бд в виде массива и передаю выбрание варианты ответов методом post на...

Сохранение результатов тестирования знаний
Здравствуйте! С помощью CodeFirst разработал базу данных для тестирования знаний. Описание моделей...

Оценка результатов тестирования пользователя
подскажите пожалуйста, начну с примера, есть опросник "ДИФФЕРЕНЦИАЛЬНО ДИАГНОСТИЧЕСКИЙ ОПРОСНИК" и...

18
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
28.09.2016, 20:09 2
Лучший ответ Сообщение было отмечено LiBrus как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
$arr = [
        6=>[26=>5,27=>4,28=>3,29=>2,30=>1],
        7=>[31=>5,32=>4,33=>3,34=>2,35=>1]
       ];
$a = [6=>28,7=>32];
$weight_answer_summ = 0;
array_walk($a,function($v,$k) use (&$weight_answer_summ,$arr){
    $sum+=$arr[$k][$v];
});
echo $weight_answer_summ;
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
28.09.2016, 20:13 3
Лучший ответ Сообщение было отмечено LiBrus как решение

Решение

без учета проверок так:
PHP
1
2
3
4
$sum=0
foreach($_POST AS $it=>$val) { 
   $sum+=$result[$it][$val];
}
1
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
28.09.2016, 20:27  [ТС] 4
если я правильно понял, что $it - это номер ответа, а $val - это номер вопроса, то составленная по аналогии функция выдала ошибку...
PHP
1
2
3
foreach($_POST AS $answer_id=>$weight_answer){ 
            echo $weight_answer_summ+=$result[$answer_id][$weight_answer];
            }
буду пробовать еще вариант svs171, но я так понимаю, что мне вместо 6=>[26=>5,27=>4,28=>3,29=>2,30=>1] нужно подставить массив, который это выводит... сейчас отпишу результат
0
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
28.09.2016, 20:35 5
LiBrus, посмотрите, что Вы в $_POST получаете
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
28.09.2016, 21:33  [ТС] 6
Azdeman, моим познаниям по php 4 дня отроду, как-то нехватает матчасти, а сроки поджимают. подскажите пожалуйста, какую еще инфу мне дать, чтоб у меня все получилось, а то пока как-то никак...
PHP
1
2
3
4
5
6
7
$arr[$result];
$a[$_POST];
$weight_answer_summ = 0;
array_walk($a,function($weight_answer, $answer_id) use (&$weight_answer_summ, $arr){
    $sum+=$arr[$answer_id][$weight_answer];
});
echo $weight_answer_summ;
Добавлено через 13 минут
в $_POST я получаю question_id (номер вопроса) и answer_id (номер ответа, который дал пользователь)
Кликните здесь для просмотра всего текста
Array
(
[1] => 1
[2] => 9
[3] => 15
[4] => 19
)

в $result я получаю question_id, answer_id и weight_answer (вес каждого ответа)
Array
(
[1] => Array
(
[1] => 5
[2] => 4
[3] => 3
[4] => 2
[5] => 1
)
с помощью ф-ции $test_all_data_result я вывожу все вместе. Т.е. у меня есть связка между question_id, answer_id и weight_answer

Добавлено через 34 минуты
друзья, ничегошеньки не получилось... что-то я точно делаю не так...
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
28.09.2016, 22:30 7
Цитата Сообщение от LiBrus Посмотреть сообщение
$arr[$result];
$a[$_POST];
Не то.
Зачем вы это делаете?

Переменные такие большие , я уже запутался
PHP
1
2
3
4
5
6
7
$_POST = [1=>1,2=>9,3=>15,4=>19];
$result =[1=>[1=>5,2=>4,3=>3,4=>2,5=>1]];
$weight_answer_summ = 0;
array_walk($_POST,function($weight_answer, $answer_id) use (&$weight_answer_summ, $result){
    $weight_answer_summ+=$result[$answer_id][$weight_answer];
});
echo $weight_answer_summ;
5

Добавлено через 4 минуты
Цитата Сообщение от LiBrus Посмотреть сообщение
$sum
Тут же уже не summ , а вот
Цитата Сообщение от LiBrus Посмотреть сообщение
&$weight_answer
1
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
28.09.2016, 22:52  [ТС] 8
Спасибо, что не остались равнодушными к моему вопросу, но хочу уточнить значек & перед &$weight_answer нужен? и еще $_POST = [1=>1,2=>9,3=>15,4=>19]; $result =[1=>[1=>5,2=>4,3=>3,4=>2,5=>1]]; - это я как пример написал, а так оно все не вручную, а по процедуре выводится для всех вопросов и ответов в массив. может $_POST и $result как то через фунцию вывести?
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
function sum_result($test_all_data, $result, $_POST){
        $weight_answer_summ = 0;
        array_walk($_POST,function($weight_answer, $answer_id) use (&$weight_answer_summ, $result){
        $weight_answer_summ+=$result[$answer_id][$weight_answer];
            });
        echo $weight_answer_summ;
        }

но в таком варианте, как я написал, оно не работает. Спасибо, что не посылаете, но я правда еще очень сырой в этом...
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
28.09.2016, 23:11 9
Цитата Сообщение от LiBrus Посмотреть сообщение
&$weight_answer нужен?
в скобках да.
Цитата Сообщение от LiBrus Посмотреть сообщение
это я как пример написал
И я вам как пример написал.
Цитата Сообщение от LiBrus Посмотреть сообщение
может $_POST и $result как то через фунцию вывести?
Может
Цитата Сообщение от LiBrus Посмотреть сообщение
но в таком варианте, как я написал, оно не работает
Область видимости
PHP
1
2
3
4
5
6
7
8
9
10
11
$_POST = [1=>1,2=>9,3=>15,4=>19];
$result =[1=>[1=>5,2=>4,3=>3,4=>2,5=>1]];
function sum_result($test_all_data, $result,$_){
        $weight_answer_summ = 0;
        array_walk($_,function($weight_answer, $answer_id) use (&$weight_answer_summ, &$result){
        $weight_answer_summ+=$result[$answer_id][$weight_answer];
            });
        echo $weight_answer_summ;
        }
 
sum_result('',$result,$_POST);
На счёт этих не понятных закарлючек ( & ) , не понятных даже мне .. почитайте в документации. Да и про область видимость тоже.

Добавлено через 4 минуты
Цитата Сообщение от LiBrus Посмотреть сообщение
но я правда еще очень сырой в этом...
Да тут все такие , всё таки раздел php для начинающих , а не оканчивающих.
1
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
28.09.2016, 23:39  [ТС] 10
спасибо, что по полочкам, но все же смысл первых двух строчек мне не понятен ($_POST = [1=>1,2=>9,3=>15,4=>19];
$result =[1=>[1=>5,2=>4,3=>3,4=>2,5=>1]] Зачем мы их пишем, если они и так выполняются по результатам $_POST и $result. вобщем, если их оставлять , то ошибка выдается (Parse error: syntax error, unexpected '[' in E:\OpenServer\domains\localhost\testing\functions.php on line 149) (line 149 - это $_POST = [1=>1,2=>9,3=>15,4=>19]и на экране больше ничего
если эти две строки убрать, то выходит сообщение
Notice: Undefined variable: result in E:\OpenServer\domains\localhost\testing\functions.php on line 157
0
на line 157 - sum_result('',$result,$_POST);
если и line 157 убрать, то работает все, кроме этой горе-суммы((((
вобщем, истина где-то рядом.....
может мне можно как-то сбросить эти файлы свои все с базой и кто посмотрит/подскажет?
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
29.09.2016, 00:04 11
Цитата Сообщение от LiBrus Посмотреть сообщение
Зачем мы их пишем
Для примера. Для того что бы показать , что мой код работает
http://sandbox.onlinephpfuncti... cae9bd92dd
А вы уже подставляйте свои массивы (которые приходят), я вам лично не запрещаю. Может кто запрещает, он отпишется , если что. Так что пока можно.

Добавлено через 1 минуту
Цитата Сообщение от LiBrus Посмотреть сообщение
вобщем, истина где-то рядом....
Да, когда поймете как работает php.

Добавлено через 59 секунд
Цитата Сообщение от LiBrus Посмотреть сообщение
Parse error: syntax error, unexpected '['
у вас старая версия PHP массивы создаются там с помощью
PHP
1
array();
в место
PHP
1
[];
Для старой версии
http://sandbox.onlinephpfuncti... 21b72e213b
Без примера (тут вы просто в аргументы функции вставляйте свои значение)
http://sandbox.onlinephpfuncti... 066dccd248

Добавлено через 7 минут
Цитата Сообщение от LiBrus Посмотреть сообщение
Notice: Undefined variable: result in
Не определена переменная . А вы говорите что они у вас и так есть. Видать какой то нет. Проверяйте. Может название переменных не сходятся
Цитата Сообщение от LiBrus Посмотреть сообщение
на line 157 - sum_result('',$result,$_POST);
если и line 157 убрать, то работает все, кроме этой горе-суммы((((
Ну вы вызов функции убрали, это как убрать колёса у машины, и садясь в нее думать что поедешь.
1
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
29.09.2016, 00:11  [ТС] 12
я не сомневался в вашем коде, я сомневался в своих способностях
спасибо, буду как-то разбираться со своим массивом. только еще одно - а как все-таки мне работать с массивом, который приходит по $_POST и $result - просто использовать ваш алгоритм без первых двух строк?
больше не буду вас беспокоить, когда получится - просто отпишусь, чтоб закрыть тему.
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
29.09.2016, 23:25  [ТС] 13
вобщем, я уже седею возле этой функции.
кто может посмотреть, прошу помочь.
я сделал, что функция с наперед заданным условием в $_POST и $result
Кликните здесь для просмотра всего текста
$_POST = array(1=>1,2=>9,3=>15,4=>19);
$result = array(1=>array(1=>5,2=>4,3=>3,4=>2,5=>1));

, как предложил Azdeman(за что спасибо), работает на старой версии php 5.3 с массивом array();
вот
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
$_POST = array(['question_id'] => $answer_id );
$result = array(['question_id'] => array ( ['answer_id'] => $weight_answer) );
function sum_result($test_all_data, $result,$_){
$weight_answer_summ = 0;
array_walk($_,function($weight_answer, $answer_id) use (&$weight_answer_summ, &$result){
$weight_answer_summ+=$result[$answer_id][$weight_answer];
});
echo $weight_answer_summ;
}
sum_result(»,$result,$_POST);

но она не работает.
прикрепляю дамп базы и функцию для понимающих, кто может подсказать так сказать по горячим следам
у меня в эту сумму упирается весь результат тестирования. а так пока получается пока все впустую.
спасибо всем, кто отзовется.
и еще, для меня как для новичка напишите расшифровку, как она должна читаться так сказать на русском языке, а то я как обезьянка сдер ее со своего $result, а "фонетику" не чувствую. может так какая мысль прийдет
PHP
1
$result = array(['question_id'] => array ( ['answer_id'] => $weight_answer) );
Вложения
Тип файла: rar testing.rar (9.5 Кб, 5 просмотров)
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
30.09.2016, 21:36 14
Цитата Сообщение от LiBrus Посмотреть сообщение
array(['question_id']
Это что за запись? Так писать нельзя. У вас поидеи ошибка должна быть
что то типо
Fatal error: Illegal offset type in
Можно включить вывод ошибок
сразу после дескриптора <?php
прописать
PHP
1
error_reporting(E_ALL);
У вас ошибка на ошибке. В общем , милости прошу
http://php.net/manual/ru/language.types.array.php
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
30.09.2016, 23:19  [ТС] 15
ок, иду в указанном направлении, может что прояснится. спасибо!

Добавлено через 1 час 33 минуты
прочитал, переписал вроде как по уму
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
$_POST = array("question_id" => $answer_id );
    $result = array("question_id" => array( "answer_id" => $weight_answer) );
    function sum_result($test_all_data, $result,$_){
    $weight_answer_summ = 0;
    array_walk($_,function($weight_answer, $answer_id) use (&$weight_answer_summ, &$result){
    $weight_answer_summ+=$result[$answer_id][$weight_answer];
    });
    echo $weight_answer_summ;
    }
    sum_result('',$result,$_POST);

вот такие предупреждения
Кликните здесь для просмотра всего текста
Notice: Undefined variable: answer_id in E:\OpenServer\domains\localhost\testing\functions.php on line 149

Notice: Undefined variable: weight_answer in E:\OpenServer\domains\localhost\testing\functions.php on line 150

Notice: Undefined index: in E:\OpenServer\domains\localhost\testing\functions.php on line 154
0
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
30.09.2016, 23:30 16
Неопределенная переменная: answer_id
PHP
1
2
var_dump($answer_id); //что выводит?
var_dump($weight_answer); //что выводит?
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
01.10.2016, 15:50  [ТС] 17
Azdeman, я теперь чуть больше знаю, чем знал, и могу проанализировать, то, что написал. Переменные $answer_id и $weight_answer - это у меня не просто переменные, а глобальные переменные, которые существуют вне функции в БД, поэтому такие названия мне нельзя было принимать.
Я все переделаю, и потом отпишусь. Тему не закрою, пока не напишу, что у меня все работает!! Спасибо за поддержку!
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
01.10.2016, 18:43  [ТС] 18
ребята, если кто открывал прикрепленный архив, то прошу прощения, я там дамп БД сбросил без последнего изменения..... поэтому он не работал с ф-цией. перезаливаю и прошу модератора заменить, чтоб те, кто захочет помочь, скачали правильный...
Вложения
Тип файла: rar testing.rar (23.6 Кб, 5 просмотров)
0
0 / 0 / 0
Регистрация: 09.09.2016
Сообщений: 12
01.10.2016, 22:55  [ТС] 19
Итак, благодарность Azdeman, svs171 за то, что откликнулись.
Вст-таки вариант svs171 оказался ближе по духу, т.к. проще процедура. array_walk для меня оказался сложнее.
необходимо было на вход вместо $_POST, $result подать новые $ans,$weight
в функцию вывода результатов нужно было добавить переменную $res и выводить так
PHP
1
function print_result($test_all_data_result, $res)
ну а вот она злосчасная функция
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
function get_user_result($ans,$weight){
    $test_points=0;
    foreach ($ans as $key => $value){
        $test_points+=$weight[$key][$value];
    }
    return $test_points;
}

и потом ниже в // вывод результатов
PHP
1
$test_points_result = get_user_result($_POST, $res);
Вопрос решен. Тема закрыта! Всем еще раз спасибо!
0
01.10.2016, 22:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2016, 22:55
Помогаю со студенческими работами здесь

Задача на матрицы. Обработка результатов тестирования студентов
Тестирование коллектива. Пусть матрица размером N x M содержит информацию о результатах...

Условия для подсчета результатов тестирования на php+MySQL
Здраствуйте, я вывожу тесты с бд в виде массива.Подскажите, как правильно задать условия для...

Создать текстовый файл результатов тестирования локальной сети ipconfig /all
Создать текстовый файл результатов тестирования локальной сети ipconfig /all помещенных в рамку. ...

Как корректно сделать подсчет результатов тестирования и сохранить их в txt формате?
подскажите пожалуйста как корректно сделать подсчет результатов тестирования и сохранить их в txt...


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

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