Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Цикл в цикле

Сообщения:  [1-10]    [11-20]   [21-30]  [31-33] 

 
 автор: BinLaden   (29.05.2008 в 20:39)   письмо автору
 
   для: chexov   (29.05.2008 в 16:39)
 

chexov, значит надо все переписывать.

   
 
 автор: SiM(R)   (29.05.2008 в 17:00)   письмо автору
 
   для: 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)   письмо автору
 
   для: 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 
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 
?>

и так со всеми вопросами

   
 
 автор: SiM(R)   (29.05.2008 в 15:58)   письмо автору
 
   для: 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=$i<=count($_SESSION['o'])-$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];
        }


Надеюсь это то, что надо.

   
 
 автор: BinLaden   (29.05.2008 в 15:17)   письмо автору
 
   для: chexov   (29.05.2008 в 15:00)
 

Извините, что вмешиваюсь в эту жаркую тему:)

SiM(R) Вам сделал очень верное замечание. Ни в коем случае не генерируете переменные вида $_SESSION['o'. N], используйте массивы, они для этого и предназначались.

   
 
 автор: chexov   (29.05.2008 в 15:00)   письмо автору
 
   для: SiM(R)   (29.05.2008 в 12:56)
 

ответьте пожалуйста:

 chexov    (29.05.2008 в 04:47)   на этот пост только не rand(1, 4)

можн оподробнее а то мозг совсем закипел, мурыжим тему как портянку

   
 
 автор: SiM(R)   (29.05.2008 в 12:56)   письмо автору
 
   для: chexov   (29.05.2008 в 12:28)
 

Не стоит так отчаиваться ), количество вопросов легко посчитать с помощью команды count().

<?php
for ($i=1$i<=count($_SESSION['o']); $i++)
{
}
?>


Только создавайте сессии не второго уровня, а третьего. то есть не надо создавать сессии вида $_SESSION['o'.$var], Вам потом будет очень трудно с ними работать. Вместо этого делайте так: $_SESSION['o'][$var].

   
 
 автор: chexov   (29.05.2008 в 12:28)   письмо автору
 
   для: 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
=======================
Дайте пример кода а то я совсем уже запутался.... хоть тему новую создавай

   
 
 автор: SiM(R)   (29.05.2008 в 12:09)   письмо автору
 
   для: chexov   (29.05.2008 в 11:50)
 

Ну, цикл который Вы написали в самом начале правильный!!! Сначала Вы там перебираете вопросы $t, а потом при $t=1 (то есть первый вопрос) вы проверяется ответы и формируется список всех вариантов ответов (тут и указывайте количество вариантов ответов, то есть в вашем случаи 4).

   
 
 автор: chexov   (29.05.2008 в 11:50)   письмо автору
 
   для: 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
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 
// правильный
?>

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-33] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования