Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 21:33   #11
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от maksikus Посмотреть сообщение
В принципе я так и написал.
Ну я потому в 10-ти постах и уточнял детали....

Вобщем можно сделать примерно так:

Дамп таблицы:
Код:
--
-- Структура таблицы `opit`
--

CREATE TABLE IF NOT EXISTS `opit` (
  `ap` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `vl` int(11) NOT NULL,
  `pit` int(11) NOT NULL,
  `status` varchar(255) NOT NULL,
  PRIMARY KEY (`ap`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11 ;

--
-- Дамп данных таблицы `opit`
--

INSERT INTO `opit` (`ap`, `vl`, `pit`, `status`) VALUES
(1, 0, 5, 'Test vl = 0'),
(2, 0, 5, 'Test vl = 0'),
(3, 0, 5, 'Test vl = 0'),
(4, 0, 5, 'Test vl = 0'),
(5, 3, 3, 'Test vl = 3'),
(6, 4, 4, 'Test vl = 4'),
(7, 1, 10, 'Test vl = 1'),
(8, 1, 10, 'Test vl = 1'),
(9, 1, 10, 'Test vl = 1'),
(10, 1, 10, 'Test vl = 1');
Далее код:
PHP код:
<table border="1" bordercolor="Blue" width="400">
    <tr>  
    <td bgcolor="#CCFF00" width=60><center><font color=red><b>ap</b></center></td>  
    <td bgcolor="#CCFF00" width=60><center><font color=red><b>vl</b></center></td>  
    <td bgcolor="#CCFF00" width=60><center><font color=red><b>pit</b></center></td>  
    <td bgcolor="#CCFF00" width=60><center><font color=red><b>status</b></center></td>  
    </tr>
<?php
$result 
mysql_query('SELECT * FROM `opit`');
if(
mysql_num_rows($result) > 0){
    
$rows_array = array();// массив с записями из БД
    
$tmp_array = array();// временный массив для повторяющихся значений
    
    
while($row mysql_fetch_array($result)){
        
$rows_array[] = $row;// получаем все записи из таблицы
    
}
    
    
$count_rows count($rows_array);
    for (
$i=0$i $count_rows$i++) { 
    
$next_vl $i 1;// след. элемент массива для сверки значений vl
    
$prev_vl $i 1;// предыдущий элемент
        
    
if($rows_array[$i]['vl'] == $rows_array[$next_vl]['vl']){
        
$tmp_array[] = $rows_array[$i];// если след. vl повторяется - во врем. массив
    
}
    elseif(
$rows_array[$i]['vl'] == $rows_array[$prev_vl]['vl']){
        
$tmp_array[] = $rows_array[$i];// если это последний из повторов подряд
        
$rowspan count($tmp_array);
            
        
// выводим повторяющиеся записи,идущие подряд,в которых значения vl одинаковые
?>
    <tr>
    <td bgcolor="#3399CC" width="60"><center><?php echo $tmp_array[0]['ap']; ?></center></td>
    <td bgcolor="#3399CC" width="60" rowspan="<?php echo $rowspan?>"><center><?php echo $tmp_array[0]['vl']; ?></center></td>
    <td bgcolor="#3399CC" width="60" rowspan="<?php echo $rowspan?>"><center><?php echo $tmp_array[0]['pit']; ?></center></td>
    <td bgcolor="#3399CC" width="60"><center><?php echo $tmp_array[0]['status']; ?></center></td>
    </tr>
<?php
        
for ($j=1$j $rowspan$j++) { 
?>
    <tr>
    <td bgcolor="#3399CC" width="60"><center><?php echo $tmp_array[$j]['ap']; ?></center></td>
    <td bgcolor="#3399CC" width="60"><center><?php echo $tmp_array[$j]['status']; ?></center></td>
    </tr>
<?php
        
}
        
$tmp_array = array();// очищаем временный массив
    
}
    else{
        
// выводим обычные записи,не имеющие рядом повторов значений vl
?>
    <tr>
    <td bgcolor="#3399CC" width="60"><center><?php echo $rows_array[$i]['ap']; ?></center></td>
    <td bgcolor="#3399CC" width="60"><center><?php echo $rows_array[$i]['vl']; ?></center></td>
    <td bgcolor="#3399CC" width="60"><center><?php echo $rows_array[$i]['pit']; ?></center></td>
    <td bgcolor="#3399CC" width="60"><center><?php echo $rows_array[$i]['status']; ?></center></td>
    </tr>
<?php            
    
}
    }
}
?>
</table>
Ну и вот так выглядит результат:


Этот пример - проверка идентичности значений 1-го поля(`vl`) - если проверять ещё и ваш `pit` - ну всё будет ещё более замороченно...
Как видите - код нормально реагирует на то,что попадаются и неповторяющиеся значения `vl`,не нарушая структуру таблицы.
Andkorol вне форума Ответить с цитированием
Старый 26.08.2010, 04:46   #12
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Этот пример - проверка идентичности значений 1-го поля(`vl`) - если проверять ещё и ваш `pit` - ну всё будет ещё более замороченно...
Как видите - код нормально реагирует на то,что попадаются и неповторяющиеся значения `vl`,не нарушая структуру таблицы.
Спасибо огроменное за проделанную работу.
Я на массивах и заморочился на самом деле.
maksikus вне форума Ответить с цитированием
Старый 26.08.2010, 10:29   #13
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Я на массивах и заморочился на самом деле.
Понимаю - самому пришлось слегка вспотеть..))))
Всегда так : просто_и_удобно != просто_и_быстро
Andkorol вне форума Ответить с цитированием
Старый 26.08.2010, 12:20   #14
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Понимаю - самому пришлось слегка вспотеть..))))
Всегда так : просто_и_удобно != просто_и_быстро
Есть другой вариант решения сей проблемы, без БД:

PHP код:
<html>
 <head>
 <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
 <title>Merge table cells</title>
 <style type="text/css">
     td {
         border: solid 1px blue;
         min-height: 20px;
         text-align: center;
         vertical-align: center;
         width: 40px;
     }
 </style>
 </head>
 <body>

<?php
     
 $output 
= array();
 
$matches = array();
 
$srcnum = array();
  
$output = array(
 array(
'1''0''5''10''10''10''10''0''0''0''Интерпритация''-'), 
 array(
'2''0''5''1''11''1''11''0''0''20''Интерпритация''-'), 
 array(
'3''0''5''1''12''1''12''1''1''40''Интерпритация''-'), 
 array(
'4''0''5''1''13''2''14''3''4''70''Интерпритация''-'), 
 array(
'5''1''10''3''16''3''17''5''9''100''Возможность''Цель'), 
 array(
'6''1''10''1''17''1''18''1''10''140''Возможность''Цель'), 
 array(
'7''1''10''1''18''2''20''1''11''190''Возможность''Цель'), 
 array(
'8''1''10''1''19''2''22''4''15''250''Возможность''Цель'), 
 array(
'9''1''10''1''20''3''25''7''22''320''Возможность''Цель')
 );
  
/* для каких либо целей можно перевернуть массив в другой вид - строки, внутри значения столбцов 
 for($r=0;$r<count($values); $r++){
     for($c=0;$c<count($values[$r]); $c++){
         $output[$c] = isset($output[$c]) ? $output[$c] : array();
         $output[$c][$r] = $values[$r][$c];
     }
 }
 */

 /* находим совпадения, заносим в отдельный массив */
 
for($r=0;$r<count($output); $r++){
     for(
$c=0;$c<count($output[$r]); $c++){
         
$matches[$r] = isset($matches[$r]) ? $matches[$r] : array();
         if(isset(
$output[$r-1][$c]) && $output[$r-1][$c]==$output[$r][$c]){
             
$matches[$srcnum[$c]][$c]++;
             
$matches[$r][$c] = 0;
         } else {
             
$srcnum[$c] = $r;
             
$matches[$r][$c] = 1;
         }
     }
 }
  
 
$content '<table>';
 for(
$r=0;$r<count($output); $r++){
     
$content .= '<tr>';
     for(
$c=0;$c<count($output[$r]); $c++){
         if(
$matches[$r][$c] == 0) {
             continue;
         } else {
             
$content .= ($matches[$r][$c] > 1) ? '<td rowspan="'.$matches[$r][$c].'">' '<td>';
             
$content .= $output[$r][$c].'</td>';
         }
     }
     
$content .= '</tr>';
 }
 
$content .= '</table>';
  
 echo 
$content;
  
 
?>

 </body>
 </html>
maksikus вне форума Ответить с цитированием
Старый 26.08.2010, 13:56   #15
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от maksikus Посмотреть сообщение
Есть другой вариант решения сей проблемы, без БД:
Конечно есть - только ж я исходил из того,что данные для таблицы динамически изменяются(их количество,например) - потому мы и пользуем БД...
А ещё потому, что так было заложено в исходном примере(использование БД).
Хотя,конечно,при желании можно организовать динамическое изменение/редактирование и такого массива.
Вот буквально недавно на форуме я писал решение для создания динамического Меню без БД - можно применить тот же принцип:
- массив -> сериализация -> запись в файл;
- чтение из файла -> unserialize() -> использование массива(вывод,редактирование - ets.)
Andkorol вне форума Ответить с цитированием
Старый 27.08.2010, 04:08   #16
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Конечно есть - только ж я исходил из того,что данные для таблицы динамически изменяются(их количество,например) - потому мы и пользуем БД...
А ещё потому, что так было заложено в исходном примере(использование БД).
Хотя,конечно,при желании можно организовать динамическое изменение/редактирование и такого массива.
Вот буквально недавно на форуме я писал решение для создания динамического Меню без БД - можно применить тот же принцип:
- массив -> сериализация -> запись в файл;
- чтение из файла -> unserialize() -> использование массива(вывод,редактирование - ets.)
На счет использования массива можно поподробнее?
maksikus вне форума Ответить с цитированием
Старый 27.08.2010, 10:17   #17
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Подробнее в этой теме.
Под "использованием массива" я подразумеваю использование данных из этого массива для формирования таблицы(в вашем случае),а также изменение количества элементов в массиве,или изменение информации в уже существующих элементах.
На примере приведённых по ссылкам функций вам нужно будет написать свои,которые будут обслуживать ваш массив с учётом его особенностей и структуры.
Andkorol вне форума Ответить с цитированием
Старый 27.08.2010, 12:43   #18
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Подробнее в этой теме.
Под "использованием массива" я подразумеваю использование данных из этого массива для формирования таблицы(в вашем случае),а также изменение количества элементов в массиве,или изменение информации в уже существующих элементах.
На примере приведённых по ссылкам функций вам нужно будет написать свои,которые будут обслуживать ваш массив с учётом его особенностей и структуры.
Спасибо за разъяснение, пример по ссылке учту в дальнейшей работе над скриптом

З.Ы.: дискуссия у вас получилась очень интересная
maksikus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слетает верстка... lastalert HTML и CSS 6 02.05.2010 17:14
Верстка DIVами Denisovvsh HTML и CSS 4 09.03.2010 21:32
верстка NecRoMat HTML и CSS 5 02.10.2008 01:03
Блочная верстка Demonichka HTML и CSS 2 12.07.2008 01:31