За последние 24 часа нас посетили 35086 программистов и 1737 роботов. Сейчас ищут 763 программиста ...

проблема с кодом array_multisort

Тема в разделе "PHP для новичков", создана пользователем alexanderkarpov, 8 ноя 2010.

  1. alexanderkarpov

    alexanderkarpov Активный пользователь

    С нами с:
    23 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    Привет!
    Не получается наладить код с array_multisort. При нажатии показать оценки, хочу чтобы появилась другая таблица, где имена и оценки отфильтрованы с помощью команды array_multisort. Вот код:

    PHP:
    1. <body>
    2. <form method="post" action="exam.php">
    3.   <input type="hidden" name="posted" value="true" />
    4.   <table border="1">
    5.   <?php
    6. $student = array("Альберт Инштейн", "Иван Грозный", "Исаак Ньютон", "Наполеон");
    7. while (list(, $name) = each($student)) {
    8. echo "<tr><td>Какую оценк по математике получил <b>$name</b></td>";
    9. echo "<td><select name = 'math[]'>
    10. <option>A</option>
    11. <option>B</option>
    12. <option>C</option>
    13. <option>D</option>
    14. <option>F</option>
    15. <option>G</option>
    16. </select>";
    17.  
    18.  
    19. echo "<input type='hidden' name='student[]' value ='$name'/></td></tr>";;
    20. }
    21. ?>
    22.  
    23. <tr><td>&nbsp;</td><td>
    24. <input type="submit" value="Показать оценки"/>
    25. </td></tr></table></form>
    26. <?php
    27. if (isset($_POST['posted'])) {
    28. ?>
    29. <table border="1">
    30. <tr><td colspan="2">Оценки по математике расположены в следующем порядке</td></tr>
    31. <?php
    32. while (list($index,$value)=each($_POST['math'])) {
    33. $student[]=$_POST['student'][$index];
    34. $math[]=$_POST['math'][$index];
    35. }
    36.  
    37. array_multisort($math,$student);
    38. while (list($index,$value)=each($student))
    39. {
    40. echo "<tr><td><b>$student[$index]</b></td><td>$math[$index]</td></tr>";
    41.  
    42. }
    43. }
    44. ?>
    45. </table>
    46.  
    47. </body>
    И вот что получается:
    Код (Text):
    1. Warning: array_multisort(): Array sizes are inconsistent in C:\work\site.ru\www\phpnew\c4\exam.php on line 44 Notice: Undefined offset: 4 in C:\work\site.ru\www\phpnew\c4\exam.php on line 47 Notice: Undefined offset: 5 in C:\work\site.ru\www\phpnew\c4\exam.php on line 47 Notice: Undefined offset: 6 in C:\work\site.ru\www\phpnew\c4\exam.php on line 47 Notice: Undefined offset: 7 in C:\work\site.ru\www\phpnew\c4\exam.php on line 47
    Где моя ошибка?
     
  2. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    У вас массив уже объявлен в начале скрипта в линии 6. Соответственно в линии 33 к нему ещё прибавляется такой массив. Вот и несоответствие. Либо обнуляйте массив $student после проверки $_POST['posted'], либо называйте по-другому.

    Для информации: foreach ($student as $name) работает быстрее чем while (list(, $name) = each($student)), да и выглядит куда более читабельно.
     
  3. alexanderkarpov

    alexanderkarpov Активный пользователь

    С нами с:
    23 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    Все работает!
    Поменял имя масива!
    Буду иметь ввиду также на счет Foreach.
    Спасибо Johnatan