2013-09-11 3 views
0

Проблема:Распечатайте вопросы в последовательном порядке в PHP

У меня есть почтовый файл, который содержит 13 файлов XML. Каждый файл, за исключением первого, содержит вопрос о викторине и несколько ответов. Когда я загружаю файл в следующий скрипт, он правильно печатает вопросы и ответы, но НЕ в порядке. Порядок вопросов случайным образом меняется каждый раз при загрузке zip-файла.

Вопрос:

Есть ли способ, что я могу использовать имена файлов, чтобы сказать, сценарий для распечатки вопросов в последовательном порядке каждый раз?

Zip-файл содержит:

  • imsmanifest.xml
  • item101008.xml
  • item101009.xml
  • item101010.xml
  • item101011.xml
  • item101012.xml
  • item101013.xml
  • item101014.xml
  • item101015.xml
  • item101016.xml
  • item101017.xml
  • item101018.xml
  • item101019.xml

PHP-скрипт (предупреждение, длинный сценарий):

<?php 
    //Initialize counter 
    $i = 0; 

    //Go through each file 
    while (($file = readdir($dh)) !== false) 
    { 
     //Skipt the first loop 
     if ($i > 1) 
     { 
      //Ignore misc file  
      if ($file != 'imsmanifest.xml') 
      { 
       //Create new DOM document 
       $dom= new DOMDocument(); 

       //Load XML file 
       $dom->load('uploads/' . $file); 

       //Do not preserve white space 
       $dom->preserveWhiteSpace = false; 

       //Check if correct answers should be displayed 
       if (isset($_POST['XMLAnswers'])) 
       { 
        //Get correct answer 
        $correct = $dom->getElementsByTagName("correctResponse")->item(0)->nodeValue; 

        //Get question 
        $questions = $dom->getElementsByTagName('p')->item(0)->nodeValue; 

        //Print out question 
        echo '<h4>' . htmlspecialchars($questions) . '</h4>' . "\n"; 

        //Get answers 
        $domTable = $dom->getElementsByTagName("simpleChoice"); 

        //Loop through each answer 
        foreach ($domTable as $answers) 
        { 
         //Delete potential unnecessary tags 
         $pattern = array(
              '<p xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1">', 
              '</p>' 
            ); 

         //Check if answer is correct one 
         if ($correct == $answers->getAttribute('identifier')) 
         { 
          //Print out correct answer 
          echo '<span style="color:red;">' . utf8_decode(str_replace($pattern, '', innerHTML($answers))) . '</span><br />' . "\n"; 
         } 
         else 
         { 
          //Print out answer 
          echo utf8_decode(str_replace($pattern, '', innerHTML($answers))) . '<br />' . "\n"; 
         } 
        } 
       } 
      } 
     } 
     //Increment counter 
     $i++; 
    } 
?> 
+0

Доброта, это действительно длинный код. В любом случае вы можете обрезать шум, который не так уж и уместен и сохранить хорошие вещи? – Fluffeh

+0

Хорошо, извините. Гораздо меньше кода. – kexxcream

+0

Вопрос заключается в следующем порядке в xml i.e. 1-10 в item101008.xml, а затем в 11-20 в item101009.xml также как последовательность вопросов находится в одном файле случайным образом или последовательно. – dkkumargoyal

ответ

2

Вместо использования opendir/readdir используйте scandir. См. http://www.php.net/manual/en/function.scandir.php. scandir возвращает вам отсортированный массив файлов в каталоге. Вы должны иметь возможность отказаться от этого кода и работать с минимальными изменениями, кроме замены внешнего, в то время как цикл readdir:

$files = scandir($dir); 
foreach ($files as $file) { 
    //your current code 
} 
+0

Моя личная заставка. Спасибо, работал как шарм. – kexxcream

Смежные вопросы