Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите упростить алгоритм преобразования массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
tjomamokrenko
Отправлено: 17 Октября, 2014 - 15:11:34
Post Id



Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Окт. 2014  
Откуда: Кишинёв, Молдова


Помог: 0 раз(а)




В результате выборки из базы данных получаю следующий массив:

Исходный массив (Отобразить)


Из него, впоследствии, нужно получить массив такого содержания:

Конечный массив (Отобразить)


Преобразование в следующем:

Из

CODE (htmlphp):
скопировать код в буфер обмена
  1. array(1) {
  2.   [0]=>
  3.   array(6) {
  4.     ["weekday"]=>
  5.     string(6) "День недели"
  6.     ["order"]=>
  7.     string(1) "Порядок пары"
  8.     ["subject"]=>
  9.     string(29) "Название предмета"
  10.     ["teacher"]=>
  11.     string(14) "Преподаватель"
  12.     ["classroom"]=>
  13.     string(2) "Номер кабинета"
  14.     ["homework"]=>
  15.     string(33) "Домашнее задание"
  16.   }


В

CODE (htmlphp):
скопировать код в буфер обмена
  1. array(1) {
  2.   ["День недели"]=>
  3.   array(1) {
  4.     ["Порядок пары"]=>
  5.     array(1) {
  6.       [0]=>
  7.       array(4) {
  8.         ["subject"]=>
  9.         string(29) "Название предмета"
  10.         ["teacher"]=>
  11.         string(14) "Преподаватель"
  12.         ["classroom"]=>
  13.         string(2) "Номер кабинета"
  14.         ["homework"]=>
  15.         string(33) "Домашнее задание"
  16.       }
  17.     }
  18.   }
  19. }


В настоящий момент преобразование происходит так:

PHP:
скопировать код в буфер обмена
  1. $sql = "SELECT DAYNAME(`schedule`.`date`) AS `weekday`, `schedule`.`order`, `subject`.`subject`, `subject`.`teacher`, `subject`.`classroom`, `homework`.`homework`
  2.        FROM `schedule`, `subject`, `homework`, `schedule_subject_homework`
  3.        WHERE WEEK(`schedule`.`date`, 1) = WEEK(CURDATE(), 1)
  4.        AND `schedule`.`schedule_id` = `schedule_subject_homework`.`schedule_id`
  5.        AND `subject`.`subject_id` = `schedule_subject_homework`.`subject_id`
  6.        AND `homework`.`homework_id` = `schedule_subject_homework`.`homework_id`
  7.        ORDER BY `schedule`.`order` ASC";
  8.  
  9. // Выборка
  10. $schedule = $mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
  11.  
  12. foreach ($schedule as $key => $class) {
  13.   $schedule[$class['weekday']][$class['order']][] = [
  14.     'subject' => $class['subject'],
  15.     'teacher' => $class['teacher'],
  16.     'classroom' => $class['classroom'],
  17.     'homework' => $class['homework']];
  18.  
  19.   // Убираем из массива числовые ключи нулевого уровня
  20.   if (is_int($key)) {
  21.     unset($schedule[$key]);
  22.   }
  23. }


Вопрос: мне кажется, это можно сделать намного легче. Возможно, даже с помощью SQL. Как упростить? Картинку с графическим представлением структуры БД прикрепляю
Прикреплено изображение (Нажмите для увеличения)
group.png

(Отредактировано автором: 17 Октября, 2014 - 15:26:50)

 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Октября, 2014 - 23:09:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




1) Убери апострофы из запроса, оставь их только там, где реально будет конфликтить с зарезервироваными словами.
2) Переходи на PDO.

А так - решение вполне себе. Не говнокод.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB