Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Построчный вывод таблицы
 
 автор: mister_pipin   (23.09.2012 в 01:16)   письмо автору
 
 

Всем привет!
Подскажите как вывести массив в таблице что бы было 2 колонки
Вот пример массива
Array
(
    [0] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Компьютеры
            [category] => 1
            [podcat] => 1
        )

    [1] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Сети / связь
            [category] => 1
            [podcat] => 20
        )
    [8] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Другое
            [category] => 2
            [podcat] => 28
        )
)


Нужно что бы в таблице было 2 колонки по "тематика"
Заранее спасибо

  Ответить  
 
 автор: cheops   (23.09.2012 в 09:47)   письмо автору
 
   для: mister_pipin   (23.09.2012 в 01:16)
 

Можно начать отталкиваться от следующего скрипта
<?php
  $input
[] = array( 
    
'id' => 1,
    
'tematika' => 'HI-TECH',
    
'pod_category' => 'Компьютеры' ,
    
'category' => ,
    
'podcat' => 1
     
);
  
$input[] = array( 
    
'id' => 1,
    
'tematika' => 'HI-TECH' ,
    
'pod_category' => 'Сети / связь' ,
    
'category' => ,
    
'podcat' => 20 
     
);
  
$input[] = array( 
    
'id' => ,
    
'tematika' => 'РАБОТА' ,
    
'pod_category' => 'Другое' ,
    
'category' => ,
    
'podcat' => 28 
     
);
  
// Вычисляем количество элементов в массиве
  
$total count($input);
  
// Количество столбцов в таблице
  
$numcols 2;

  
// Вычисляем количество строк
  
$number = (int)($total/$numcols);
  if((float)(
$total/$numcols) - $number != 0$number++;

  
// Формируем промежуточный двумерный массив
  
for($i 0$i $number$i++)
  {
    for(
$j 0$j $numcols$j++)
    {
      if(isset(
$input[$j*$number $i]))
        
$arr[$i][$j] = $input[$j*$number $i];
    }
  } 

  
// Выводим таблицу
  
echo "<table border=1>";
  for(
$i 0$i $number$i++)
  {
    echo 
"<tr>";
    for(
$j 0$j $numcols$j++)
    {
      if(isset(
$arr[$i][$j]['tematika']))
        echo 
"<td>".$arr[$i][$j]['tematika']."</td>";
      else
        echo 
"<td>&nbsp;</td>";
    }
    echo 
"</tr>";
  } 
  echo 
"</table>";
?>
PS Лучше предоставлять массивы сразу в корректной форме PHP, желающих ответить будет гораздо больше, так как с массивом можно поэкспериментировать и оформить ответ в виде готового скрипта.

  Ответить  
 
 автор: mister_pipin   (25.09.2012 в 08:19)   письмо автору
 
   для: cheops   (23.09.2012 в 09:47)
 

Спасибо!
Вот пример того массива который я разбираю

Array
(
    [0] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Компьютеры
            [category] => 1
            [podcat] => 1
        )

    [1] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Сети / связь
            [category] => 1
            [podcat] => 20
        )

    [2] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Интерфейс
            [category] => 1
            [podcat] => 21
        )

    [3] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Безопасность
            [category] => 1
            [podcat] => 12
        )

    [4] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Программы
            [category] => 1
            [podcat] => 9
        )

    [5] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Мобильная связь
            [category] => 1
            [podcat] => 8
        )

    [6] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Интернет
            [category] => 1
            [podcat] => 2
        )

    [7] => Array
        (
            [id] => 1
            [tematika] => HI-TECH
            [pod_category] => Другое
            [category] => 1
            [podcat] => 22
        )

    [8] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Другое
            [category] => 2
            [podcat] => 28
        )

    [9] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Работа для студентов
            [category] => 2
            [podcat] => 27
        )

    [10] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Управление персоналом
            [category] => 2
            [podcat] => 26
        )

    [11] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Временная и удаленная работа
            [category] => 2
            [podcat] => 25
        )

    [12] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Работа для IT-специалистов
            [category] => 2
            [podcat] => 23
        )

    [13] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Работа за рубежом
            [category] => 2
            [podcat] => 18
        )

    [14] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Кадровые агенства
            [category] => 2
            [podcat] => 11
        )

    [15] => Array
        (
            [id] => 2
            [tematika] => РАБОТА
            [pod_category] => Вакансии и резюме
            [category] => 2
            [podcat] => 10
        )

    [16] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Другое
            [category] => 3
            [podcat] => 32
        )

    [17] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Учебные материалы
            [category] => 3
            [podcat] => 31
        )

    [18] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Науки
            [category] => 3
            [podcat] => 30
        )

    [19] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Среднее образование
            [category] => 3
            [podcat] => 29
        )

    [20] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Высшее образование
            [category] => 3
            [podcat] => 13
        )

    [21] => Array
        (
            [id] => 3
            [tematika] => УЧЕБА
            [pod_category] => Курсы
            [category] => 3
            [podcat] => 14
        )

    [22] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Покупки
            [category] => 4
            [podcat] => 41
        )

    [23] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Мода и красота
            [category] => 4
            [podcat] => 40
        )

    [24] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Здоровье
            [category] => 4
            [podcat] => 39
        )

    [25] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Домашние животные
            [category] => 4
            [podcat] => 38
        )

    [26] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Семья
            [category] => 4
            [podcat] => 37
        )

    [27] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Все для праздника
            [category] => 4
            [podcat] => 36
        )

    [28] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Все для праздника
            [category] => 4
            [podcat] => 35
        )

    [29] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Кулинария
            [category] => 4
            [podcat] => 34
        )

    [30] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Квартира и дача
            [category] => 4
            [podcat] => 33
        )

    [31] => Array
        (
            [id] => 4
            [tematika] => ДОМ
            [pod_category] => Другое
            [category] => 4
            [podcat] => 42
        )

)


Данный массив я пытаюсь разобрать следующим образом:
1. он должен выводиться в таблице в 2 колонки
2. в колонке сначала выводится [tematika] и потом все [pod_category] которые относятся к [tematika]

Заранее спасибо!

  Ответить  
 
 автор: confirm   (25.09.2012 в 09:15)   письмо автору
 
   для: mister_pipin   (25.09.2012 в 08:19)
 

Вы бы сначала определились, что значит две колонки. Две колонки таблицы с шапкой тематик, это как - если не вмещается в левую некая тематика, ее продолжать в правой с шапкой? Вроде бы как таблица для этого не совсем удачный выбор.
И почему у вас "ДОМ" имеет две субкатегории с одинаковым наименованием?

  Ответить  
 
 автор: mister_pipin   (25.09.2012 в 09:46)   письмо автору
 
   для: confirm   (25.09.2012 в 09:15)
 

[pod_category] - это описание
[podcat] - его id

тоже самое и с
[tematika] - описание
[category] - его id

Таблицу я хочу следующего
<table>
<tr><td>Дом<br>Квартира и дача / Кулинария / Другое</td><td>Учеба<br>Среднее образование / Высшее образование / другое</td></tr>
// В следующих строках таблицы выводить  по такому же принципу
<tr><td></td><td></td></tr>
</table>

Вот что я имел когда говорил про 2 колонки

  Ответить  
 
 автор: confirm   (25.09.2012 в 09:55)   письмо автору
 
   для: mister_pipin   (25.09.2012 в 09:46)
 

Вы уж тогда прочтите и уясните себе, что такое таблица. Ну что это за чушь, использовать таблицу ради того, чтобы писать в ней:

Дом<br>Квартира и дача / Кулинария / Другое

Лучше выводить в таком случае списком.

  Ответить  
 
 автор: mister_pipin   (25.09.2012 в 10:03)   письмо автору
 
   для: confirm   (25.09.2012 в 09:55)
 

Так а если в каждой ячейче таблицы в которой будут данные вывести списком через <ul><li></li></ul>?

  Ответить  
 
 автор: confirm   (25.09.2012 в 10:18)   письмо автору
 
   для: mister_pipin   (25.09.2012 в 10:03)
 

Ага, а для пущей убедительности еще и каждое li поместить в таблицу!
Она вам нужна эта таблица, если выводить список? Запомните - можно вывести список, а его вид на странице: в одну, две, три... колонки будут определять исключительно стили. И таблица тут триста лет не нужна, таблица для табличных данных в первую очередь, а для форматирования она не лучший выбор.

Что касается именно таблицы, то ваше первое "хочу" предполагает такое:
<?
//вывод массива в две колонки, это значит разделить массив на два
//делается это просто
$a array_map(nullarray_slice($a0count($a)/2), array_slice($acount($a)/2));
//где $a массив исходник
//а дальше вывод таблицы, в которой вывод тематик
//как либо отличается, в данном случае это заголовки в таблице
$table '<table border=1>';
$h1 $h2 null;
foreach(
$a as $v) {
   
$table .= '<tr>';
   if(
$h1!=$v[0]['tematika']) {
      
$h1 $v[0]['tematika'];
      
$table .= '<th>'.$h1.'</th>';
   } else 
$table .= '<td>'.$v[0]['pod_category'].'</td>';

   if(
$h2!=$v[1]['tematika']) {
      
$h2 $v[1]['tematika'];
      
$table .= '<th>'.$h2.'</th>';
   } else 
$table .= '<td>'.$v[1]['pod_category'].'</td>';
   
$table .= '</tr>';
}
$table .= '</table>';

echo 
$table;
Все. Вот именно так можно расценивать ваше "хочу", если говорить именно о табличном выводе. И заметьте, что совсем не обязательно для этого "бить" массив по полам. Можно просто пройтись циклом, число итераций которого должно быть равно числу элементов массива-исходника деленного на 2, а в цикле индекс для данных левой колонки определяет счетчик итерации цикла, а для правой колонки этот же счетчик, плюс смещение равное числу элементов массива-исходника деленного на 2.

Вот и вся арифметика. Нужно лишь только помнить, что массив не обязательно может быть разделен поровну, а значит надо проверять есть ли элемент по смещению для правой колонки, и если нет, выводить пустую ячейку таблицы.

Но в вашем случае, после вашего "второго хочу", лучше выбросить таблицу и вывести список. Вывод списка будет выглядеть ровно также, как это описано и для таблицы, только элементы другие. При этом название тематики это список, а субкатегори его вложенный список. Но лучше определить стиль для каждого первого элемента списка, не делая никаких вложений.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования