Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод матрицы 
:(
    Опции темы
Ripper
Дата 17.2.2012, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Добрый день.
У меня есть массив который по сути из себя представляет таблицу (ширина и высота не обзательно должны совпадать). По строкам даты, по столбцам адреса, а в середине цифорка. Нужно это вывести в таблицу и последний столбец и последняя строка будет итого. Я задачу решил, но код кажется слишком как бы помягче высказаться... ну не оптимизированным, 7 foreach циклов и все такое. Можно ли его как то отрефакторить так чтобы сократить количество циклов?
Код

<table class="stats_table">
<?php 
foreach ($stats as $k => $v)
    $matrix[$v['date']][$v['address']] = $v['shows']; // Здесь я просто создаю матрицу, т.к. эти данные берутся из БД и в общем чтобы их скомпоновать запихнул в общий массив
    
    $sum = array();
    // Считаю 2 суммы, по последней строке и по последнему столбцу
    foreach ($matrix as $date => $screens) {
        foreach ($screens as $screen => $shows) {
            if (!isset($sum[$date])) $sum[$date] = $shows;
            else $sum[$date] += $shows;
            
            if (!isset($sum[$screen])) $sum[$screen] = $shows;
            else $sum[$screen] += $shows;
        }
    }
    
    echo "<tr><td>-</td>";
        // Вывожу шапку (1 строчку)
    foreach($matrix as $date => $screens) {
        foreach ($screens as $screen => $shows) 
            echo "<td>".$screen."</td>";
        break;
    }
    echo "<td>Итого</td>";
    echo "</tr>";
    // Вывожу таблицу
    foreach($matrix as $date => $screens) {
        echo "<tr>";
        echo "<td>".$date."</td>";
            foreach($screens as $screen => $shows) 
                echo "<td>".$shows."</td>";            
        echo "<td>".$sum[$date]."</td>";
        echo "</tr>";
    }
    //Вывожу последнюю строчку
    echo "<tr><td>Итого:</td>";
    foreach ($matrix as $date => $screens) {
        foreach ($screens as $screen => $shows) 
            echo "<td>".$sum[$screen]."</td>";
        break;
    }
    echo "</tr>";
?>
</table>


В результате получается например такая таблица:

-                    ул. Пупкина, д5.    Другая улица    Итого
2012-02-21    837                           681                   1518
2012-02-22    921                           558                   1479
2012-02-23    960                         535                   1495
2012-02-24    731                         788                   1519
2012-02-25    538                           829                   1367
Итого:            3987                   3391




--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
krundetz
Дата 17.2.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Ripper @  17.2.2012,  16:04 Найти цитируемый пост)
Можно ли его как то отрефакторить так чтобы сократить количество циклов?

Можно точно ужать это до 2 foreach, необходимы проверки на начальную и конечную строки, а также формирование последней строки в теле цикла


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.