|
|
|
| Подскажите как сделать правильно цикл в цикле?
<?
Например в этом скрипте
$mass1 = array('a', 'b', 'c', 'd');
$mass2 = array('1', 'b', '3', 'd');
for ($t=0; $t<=3; $t++)
{
for ($i=0; $i<=3; $i++)
{
if ($mass2[$t]==$mass1[$i]){echo "<b>".$mass1[$i]."</b>";}
else {echo $mass1[$i];}
}
}
?>
|
Выводит
а нужно
| |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 15:59)
| | Судя по коду он должен выводить то, что выводит ). И лично мне не понятно какой должен быть алгоритм. Скажите что вы должны получить и каким образом. | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 15:59)
| |
<?php
if ($mass2[$t]==$mass1[$i]){echo "<b>".$mass1[$i]."</b>";}
else {echo $mass1[$i];}
?>
|
Так ведь тут если условие верно, то вывести $mass1[$i] и иначе вывести $mass1[$i] | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 15:59)
| | Вот он четыре раза повторяется и выводит
А для чего это нужно то? | |
|
|
|
|
|
|
|
для: Zend72
(28.05.2008 в 16:27)
| | А зачем вообще делать цикл в цикле?!
<?
foreach ($mass1 as $key=>$val)
{
if ($val == $mass2[$key])
echo "<b>".$val."</b>";
else
echo $val;
}
?>
|
| |
|
|
|
|
|
|
|
для: olejek
(28.05.2008 в 16:37)
| | И то верно. | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 15:59)
| |
<?
Например в этом скрипте
$mass1 = array('a', 'b', 'c', 'd');
$mass2 = array('1', 'b', '3', 'd');
for ($t=0; $t<=3; $t++)
{
for ($i=0; $i<=3; $i++)
{
if ($mass2[$t]!=$mass1[$i]){echo "<b>".$mass1[$i]."</b>";}
else {echo $mass2[$t];}
}
}
?>
|
Вроде так... | |
|
|
|
|
|
|
|
для: Zend72
(28.05.2008 в 16:37)
| | у меня вот какая задача на самом деле
есть что то типа вопросника который выводит какое то количество вопросов по 4 варианта ответа ($var1, $var2, $var3, $var4) в каждом вопросе, отвечая на каждый вопрос, результат сохраняется в сессии, и имеет вид
$_SESSION['o'.$_SESSION['t']]
|
где $_SESSION['t'] это порядковый номер вопроса
К примеру у меня 3 вопроса
<?
for ($i=1; $i<=4; $i++)
{
for($z=1; $z<=3; $z++)
{
if ($_SESSION['o'.$z]==правильный ответ(выборка из БД)){echo "<font color='red'>".$var['$i']."</font><br/>";}
else {echo $var[$i]."<br/>";}
}
}
вот как быть?
?>
|
| |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 17:12)
| | Во-первых, из четырех вариантов, верный может быть только один, зачем вы тогда в примере сравниваете несколько переменных?
Во-вторых, вы это загодя знаете верный ответ, а значит знаете индек массива верного ответа. Поэтому достаточно получить номер ответа чтобы сравнить его и индексом верного ответа, и не надо никаких циклов. | |
|
|
|
|
|
|
|
для: sim5
(28.05.2008 в 17:40)
| | цикл нужен, для вывода всех вопросов и всех вариантов ответов в моем случае 3 вопроса по 4 варианта ответа в каждом
Впринипе я сделал
<?
$mass1 = array('1', '2', '3', '4');
foreach ($mass1 as $val)
{
if ($_SESSION['o'.$val]== ответ) { echo "<b>".$arr['var'.$val]."</b>"; }
else {echo $arr['var'.$val]; }
}
?>
|
только такой вопрос: если у меня $_SESSION['o'.$val] не 4 а 10 т.е $_SESSION['o1']...$_SESSION['o10'] а $arr['var'.$val] всегда 4 как быть? | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 17:53)
| | Погодите, вы каждый вопрос выводите по отдельности и затем выводите результат ответов по всем вопросам, или выводите все вопросы сразу? | |
|
|
|
|
|
|
|
для: sim5
(28.05.2008 в 17:59)
| | Это результат всего опроса, т.е после того как опрос пройден выводятся все вопросы опроса и правильные ответы выделяются жирным
<?
$q= mysql_query("select * from `table`");
while ($arr = mysql_fetch_array($q))
{
echo "<b>".$arr['quest']."</b><br/>";
$mass1 = array('1', '2', '3', '4');
foreach ($mass1 as $val)
{
if ($_SESSION['o'.$val] == $arr['answ']) { echo "<b>".$arr['var'.$val]."</b>"; }
else {echo $arr['var'.$val]; }
}
}
?>
|
Так как быть если у меня $_SESSION['o'.$val] не 4 а 10 т.е $_SESSION['o1']...$_SESSION['o10'] а $arr['var'.$val] всегда 4 | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 18:07)
| | И на кой ляд вам тогда цикл, да и вообще сессия, если вы получаете ответы на все сразу? Вам ведь только и осталось выдать правильно или нет, и как правильно, если ответ не верен. Подумайте сами. | |
|
|
|
|
|
|
|
для: sim5
(28.05.2008 в 18:12)
| | ВЫ что то не допонимаете, в сессию заносится ответ даный ответчиком, на каждый вопрос по сессионной переменной, т.е если в опросе 3 вопроса то в результате будет 3 сессионых перменных $_SESSION['o1'], $_SESSION['o2'], $_SESSION['o3'] это мы сравниваем с правильными ответами и если совпадает то выделяем если не совпадает то не выделяем, все предельно. Цикл мне нужен лишь для определения числа N ($_SESSION['o->N<-'] и $arr['var->N<-'] только и всего | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 18:20)
| | Другими словами: как мне сделать чтобы
<?
if ($_SESSION['o'.N] == $arr['answ']) { echo "<b>".$arr['var'.N]."</b>"; }
else {echo $arr['var'.N]; }
?>
|
на месте N стояли разные числа например в первом N от 1 до 5 во втором и третьем N от 1 до 4 | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 18:20)
| | Ответьте на такой вопрос - чем определяется правильный ответ? Т.е., как вы знаете, из массива вопросов, что, например, 2 из них правильный? | |
|
|
|
|
|
|
|
для: sim5
(28.05.2008 в 18:36)
| | потому что структура БД такова
`id`, `vopros`, `otvet(в цифровом значении)`, `var1`, `var2`, `var3`, `var4`
ответьте на вопрос >>(28.05.2008 в 18:26) остальное додумаю:) | |
|
|
|
|
|
|
|
для: chexov
(28.05.2008 в 18:44)
| | Я вообще не понимаю вашей кухни. Например, исходные вопросы расположены всегда так, что первый из них верный. Тогда для примера (из массива):
<?
//массив с вопросами, ключ вложенного массива определяет имя группы кнопок
$a = array('figure' => array('Квадрат - квадрат','Квадрат - круг','Квадрат - дуга','Квадрат - линия'),
'fruit' => array('Дыня - овощ','Дыня - фрукт','Дыня - трава','Дыня - злак'));
//выводим форму теста
print "<form method=\"post\">";
foreach($a as $key => $val) {
//создаем промежуточный массив
$m = $val;
//перемешиваем случайно вопросы
shuffle($m);
for ($i=0; $i<count($m); $i++) {
//значения кнопок равны индексу исходного массива
//это плохо, но это только для примера, можно поступить иначе
print "<input name=\"$key\" type=\"radio\" value=\"".array_search($m[$i],$val)."\">$m[$i]<br>";
}
print "<br>";
}
print "<input type=\"submit\" value=\"Send\"></form>";
//получаем результат и проверяем
if ($_POST) {
foreach($_POST as $key => $val) {
if ($val > 0) print "Ответ не верный, правильный ответ: ".$a[$key][0]."<br>";
else print "Ответ верный<br>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: sim5
(28.05.2008 в 18:36)
| | Попробую предложить следующие:
<?php
$val=0; // устанавливаем счетчик ( как я понимаю это номер вопроса?)
$q= mysql_query("select * from `table`");
while ($arr = mysql_fetch_array($q))
{
echo "<b>".$arr['quest']."</b><br/>";
$val=$val+1;
if ($_SESSION['o'.$val] == $arr['answ'])
{ echo "<b>".$arr['answ']."</b>"; }
else {echo $arr['answ']; }
}
|
| |
|
|
|
|
|
|
|
для: SiM(R)
(28.05.2008 в 19:48)
| | ладно забудьте насчет примера конкретного и ответьте на вопрос
как мне сделать чтобы
<?
if ($_SESSION['o'.N] == $arr['answ']) { echo "<b>".$arr['var'.N]."</b>"; }
else {echo $arr['var'.N]; }
?>
|
на месте N стояли разные числа например в первом N от 1 до 5 во втором и третьем N от 1 до 4 | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 04:47)
| | Так пойдет?
<?
if ($_SESSION['o'.rand('1','5')] == $arr['answ']) { echo "<b>".$arr['var'.rand('1','4')]."</b>"; }
else {echo $arr['var'.rand('1','4')]; }
?>
|
Скажите, вот вот у Вас совпало значение на ответ, которое выбрал пользователь (храниться в сессии) с тем которое должно быть, что должно выводиться?? правильный ответ ?? его номер??? его порядок??? его варинат?? что содержится в столбцах var1 и тд? | |
|
|
|
|
|
|
|
для: SiM(R)
(29.05.2008 в 06:29)
| |
<?
if ($_SESSION['o'.rand('1','5')] == $arr['answ']) { echo "<b>".$arr['var'.rand('1','4')]."</b>"; }
else {echo $arr['var'.rand('1','4')]; }
?>
|
Так не пойдет, мне нужно: от 1 до 5 (до любого числа) по порядку, и: от 1до 4 тоже по порядку для этого и нужен цикл.
==================================================================
должны выводиться все варианты ответов, а совпавший с ответом - выделиться жирным | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 06:33)
| | Вы что издеваетесь!!!!??? Тогда скрипт в вашем самом первом топике делал все правильно!!!!
в mass2 храняться ваши 4 вопроса и по каждому их них из mass1 выводятся 4 варианта ответа, при этом если совпадают, то они выделяются жирным! | |
|
|
|
|
|
|
|
для: SiM(R)
(29.05.2008 в 11:22)
| | я не спрашиваю вас как мне это вывести! я спросил
==========================================
Как сделать чтобы для $n1 было аналогично
for ($n1=1; $n1<=любое число; $n1++)
|
А для $n2 было аналогично
for ($n2=1; $n2<=4; $n2++)
|
В этом коде
<?
if ($_SESSION['o'.$n1] == $arr['answ']) { echo "<b>".$arr['var'.$n2]."</b>"; }
else {echo $arr['var'.$n2]; }
?>
|
вот как выглядит результат
<?
1 | 2 | 3 | 1 | //мои ответы в опросе
ВОПРОС1
1.вариант1 //я ответил
2.вариант2
3.вариант3 //правильный
4.вариант4
ВОПРОС2
1.вариант1 //правильный
2.вариант2 //я ответил
3.вариант3
4.вариант4
ВОПРОС3
1.вариант1
2.вариант2
3.вариант3 //я ответил и он же правильный
4.вариант4
ВОПРОС4
1.вариант1 // я ответил
2.вариант2
3.вариант3
4.вариант4 // правильный
?>
|
| |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 11:50)
| | Ну, цикл который Вы написали в самом начале правильный!!! Сначала Вы там перебираете вопросы $t, а потом при $t=1 (то есть первый вопрос) вы проверяется ответы и формируется список всех вариантов ответов (тут и указывайте количество вариантов ответов, то есть в вашем случаи 4). | |
|
|
|
|
|
|
|
для: SiM(R)
(29.05.2008 в 12:09)
| | но у меня только один определенный массив $mass = array('1', '2', '3', '4') который ответственный за варианты ответов(их всегда 4), но 2 массив у меня неопределенный, т.к в опросе может быть сколько угодно вопросов хоть 1000, не буду же я прописывать массив из 1000 пунктов
if ($_SESSION['o'.N1] == $arr['answ']) { echo "<b>".$arr['var'.N2]."</b>"; }
else {echo $arr['var'.N2]; }
N1 - неопределенный
N2 - всегда от 1до4
=======================
Дайте пример кода а то я совсем уже запутался.... хоть тему новую создавай | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 12:28)
| | Не стоит так отчаиваться ), количество вопросов легко посчитать с помощью команды count().
<?php
for ($i=1; $i<=count($_SESSION['o']); $i++)
{
}
?>
|
Только создавайте сессии не второго уровня, а третьего. то есть не надо создавать сессии вида $_SESSION['o'.$var], Вам потом будет очень трудно с ними работать. Вместо этого делайте так: $_SESSION['o'][$var]. | |
|
|
|
|
|
|
|
для: SiM(R)
(29.05.2008 в 12:56)
| | ответьте пожалуйста:
chexov (29.05.2008 в 04:47) на этот пост только не rand(1, 4)
|
можн оподробнее а то мозг совсем закипел, мурыжим тему как портянку | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 15:00)
| | Извините, что вмешиваюсь в эту жаркую тему:)
SiM(R) Вам сделал очень верное замечание. Ни в коем случае не генерируете переменные вида $_SESSION['o'. N], используйте массивы, они для этого и предназначались. | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 15:00)
| |
<?php
session_start();
$arr['answ']=array('tt','rwer','3'); // массив с правильными ответами
$arr['var1']=1; $arr['var2']='tt'; $arr['var3']=3;$arr['var4']='4'; // ну типа 4 варианта
$_SESSION['o']=array('tt','qq','3'); //создаете массив с ответами , получается "tt" это ответ на первый вопрос, 'qq' - ответ на второй и тд
for ($i=0 ; $i<=count($_SESSION['o'])-1 ; $i++) // первый цикл, перебирает вопросы по очереди
{
for ($k=1; $k<=4; $k++) // второй цикл, предназначен для выбора варианта ответа (всего 4 варианта)
{
if ($_SESSION['o'][$i] == $arr['answ'][$i]) // итак, если ответ пользователя на данный вопрос верен , то (не зависит от $k)
{ //смотрим какой именно вариант из базы верный (первый, второй, третий или четвертый) в результате выводим жирным тот, который правильный
if ($arr['answ'][$i]==$arr['var'.$k]) echo "<b><font size=5>".$arr['var'.$k]."</b></font>";
else echo $arr['var'.$k];
}
else // если пользователь ответил неверно на вопрос, то все варианты будут выведены без выделения
{
echo $arr['var'.$k];
}
}
echo '<br>'; // так, для удобства, все варианты будут с новой строки
}
?>
// вот участок который нужен Вам
for ($i=0 ; $i<=count($_SESSION['o'])-1 ; $i++) // первый цикл, перебирает вопросы по очереди
{
for ($k=1; $k<=4; $k++) // второй цикл, предназначен для выбора варианта ответа (всего 4 варианта)
{
if ($_SESSION['o'][$i] == $arr['answ'][$i]) // итак, если ответ пользователя на данный вопрос верен , то (не зависит от $k)
{ //смотрим какой именно вариант из базы верный (первый, второй, третий или четвертый) в результате выводим жирным тот, который правильный
if ($arr['answ'][$i]==$arr['var'.$k]) echo "<b><font size=5>".$arr['var'.$k]."</b></font>";
else echo $arr['var'.$k];
}
else // если пользователь ответил неверно на вопрос, то все варианты будут выведены без выделения
{
echo $arr['var'.$k];
}
|
Надеюсь это то, что надо. | |
|
|
|
|
|
|
|
для: SiM(R)
(29.05.2008 в 15:58)
| | у меня не берется в массив ответы и вопросы
они выводятся из БД в цикле while читайте выше пост
<?
for ($r=1; $r<=$_SESSION['t']; $r++)
{
for ($k=1; $k<=4; $k++)
{
if ($_SESSION['o'.$r] == $arr['otvet']){echo $k.".<font color='red'><u>".$arr['var'.$k]."</u></font><br/>";}
else {echo $k.".".$arr['var'.$k]."<br/>";}
}
}
?>
|
где $_SESSION['t']= порядковый номер ответа пользователем
получается так
<?
1 | 2 | 3 | 1 | //мои ответы в опросе
ВОПРОС1
1.вариант1 //я ответил
2.вариант2
3.вариант3 //правильный
4.вариант4
1.вариант1 //я ответил
2.вариант2
3.вариант3 //правильный
4.вариант4
1.вариант1 //я ответил
2.вариант2
3.вариант3 //правильный
4.вариант4
1.вариант1 //я ответил
2.вариант2
3.вариант3 //правильный
4.вариант4
?>
|
и так со всеми вопросами | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 16:39)
| | А если так:
<?php
for ($r=1; $r<=$_SESSION['t']; $r++)
{
echo 'Вопрос №'.($i+1).'<br>'; // Добавляем строку с номером вопроса
for ($k=1; $k<=4; $k++)
{
if ($_SESSION['o'.$r] == $arr['otvet']){echo $k.".<font color='red'><u>".$arr['var'.$k]."</u></font><br/>";}
else {echo $k.".".$arr['var'.$k]."<br/>";}
}
}
?>
|
Насчет БД и так далее - я не знаю откуда вы берете данные и как их доводите. Я предлагаю какой-то вариант, а Вы уже должны сами его интегрировать с вашим проектом. Я всего предусмотреть не могу. Создавайте какой-нибудь массив в цикле while, а потом его используйте в данном цикле. | |
|
|
|
|
|
|
|
для: chexov
(29.05.2008 в 16:39)
| | chexov, значит надо все переписывать. | |
|
|
|