|
|
|
| Всем привет!
Подскажите как вывести массив в таблице что бы было 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 колонки по "тематика"
Заранее спасибо | |
|
|
|
|
|
|
|
для: mister_pipin
(23.09.2012 в 01:16)
| | Можно начать отталкиваться от следующего скрипта
<?php
$input[] = array(
'id' => 1,
'tematika' => 'HI-TECH',
'pod_category' => 'Компьютеры' ,
'category' => 1 ,
'podcat' => 1
);
$input[] = array(
'id' => 1,
'tematika' => 'HI-TECH' ,
'pod_category' => 'Сети / связь' ,
'category' => 1 ,
'podcat' => 20
);
$input[] = array(
'id' => 2 ,
'tematika' => 'РАБОТА' ,
'pod_category' => 'Другое' ,
'category' => 2 ,
'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> </td>";
}
echo "</tr>";
}
echo "</table>";
?>
| PS Лучше предоставлять массивы сразу в корректной форме PHP, желающих ответить будет гораздо больше, так как с массивом можно поэкспериментировать и оформить ответ в виде готового скрипта. | |
|
|
|
|
|
|
|
для: 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]
Заранее спасибо! | |
|
|
|
|
|
|
|
для: mister_pipin
(25.09.2012 в 08:19)
| | Вы бы сначала определились, что значит две колонки. Две колонки таблицы с шапкой тематик, это как - если не вмещается в левую некая тематика, ее продолжать в правой с шапкой? Вроде бы как таблица для этого не совсем удачный выбор.
И почему у вас "ДОМ" имеет две субкатегории с одинаковым наименованием? | |
|
|
|
|
|
|
|
для: 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 колонки | |
|
|
|
|
|
|
|
для: mister_pipin
(25.09.2012 в 09:46)
| | Вы уж тогда прочтите и уясните себе, что такое таблица. Ну что это за чушь, использовать таблицу ради того, чтобы писать в ней:
Дом<br>Квартира и дача / Кулинария / Другое
Лучше выводить в таком случае списком. | |
|
|
|
|
|
|
|
для: confirm
(25.09.2012 в 09:55)
| | Так а если в каждой ячейче таблицы в которой будут данные вывести списком через <ul><li></li></ul>? | |
|
|
|
|
|
|
|
для: mister_pipin
(25.09.2012 в 10:03)
| | Ага, а для пущей убедительности еще и каждое li поместить в таблицу!
Она вам нужна эта таблица, если выводить список? Запомните - можно вывести список, а его вид на странице: в одну, две, три... колонки будут определять исключительно стили. И таблица тут триста лет не нужна, таблица для табличных данных в первую очередь, а для форматирования она не лучший выбор.
Что касается именно таблицы, то ваше первое "хочу" предполагает такое:
<?
//вывод массива в две колонки, это значит разделить массив на два
//делается это просто
$a = array_map(null, array_slice($a, 0, count($a)/2), array_slice($a, count($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.
Вот и вся арифметика. Нужно лишь только помнить, что массив не обязательно может быть разделен поровну, а значит надо проверять есть ли элемент по смещению для правой колонки, и если нет, выводить пустую ячейку таблицы.
Но в вашем случае, после вашего "второго хочу", лучше выбросить таблицу и вывести список. Вывод списка будет выглядеть ровно также, как это описано и для таблицы, только элементы другие. При этом название тематики это список, а субкатегори его вложенный список. Но лучше определить стиль для каждого первого элемента списка, не делая никаких вложений. | |
|
|
|