Output a php multi-dimensional array to a html table
I have a form that has 8 columns and a variable number of rows which I need to email to the client in a nicely formatted email. The form submits the needed fields as a multidimensional array. Rough example is below:
This form is formatted in a table, and rows can be added to it dynamically. What I’ve been unable to do is get a properly formatted table out of the array. This is what I’m using now (grabbed from the net).
'; foreach($arr as $arrs) < echo ''; foreach($arrs as $item) < echo "$item "; > echo ' '; > echo '; >; ?>
This works perfectly for a single row of data. If I try submitting 2 or more rows from the form then one of the columns disappears. I’d like the table to be formatted as:
| top | Bottom | Slant | Fitter | Washer | Fabric | Colours | Quantity | ------------------------------------------------------------------------ |value| value | value | value | value | value | value | value |
with additional rows as needed. But, I can’t find any examples that will generate that type of table! It seems like this should be something fairly straightforward, but I just can’t locate an example that works the way I need it too.
PHP array_column() Function
// An array that represents a possible record set returned from a database
$a = array(
array(
‘id’ => 5698,
‘first_name’ => ‘Peter’,
‘last_name’ => ‘Griffin’,
),
array(
‘id’ => 4767,
‘first_name’ => ‘Ben’,
‘last_name’ => ‘Smith’,
),
array(
‘id’ => 3809,
‘first_name’ => ‘Joe’,
‘last_name’ => ‘Doe’,
)
);
?php
$last_names = array_column($a, ‘last_name’);
print_r($last_names);
?>
Definition and Usage
The array_column() function returns the values from a single column in the input array.
Syntax
Parameter Values
Parameter | Description |
---|---|
array | Required. Specifies the multi-dimensional array (record-set) to use. As of PHP 7.0, this can also be an array of objects. |
column_key | Required. An integer key or a string key name of the column of values to return. This parameter can also be NULL to return complete arrays (useful together with index_key to re-index the array) |
index_key | Optional. The column to use as the index/keys for the returned array |
Technical Details
Return Value: | Returns an array of values that represents a single column from the input array |
---|---|
PHP Version: | 5.5+ |
More Examples
Example
Get column of last names from a recordset, indexed by the «id» column:
// An array that represents a possible record set returned from a database
$a = array(
array(
‘id’ => 5698,
‘first_name’ => ‘Peter’,
‘last_name’ => ‘Griffin’,
),
array(
‘id’ => 4767,
‘first_name’ => ‘Ben’,
‘last_name’ => ‘Smith’,
),
array(
‘id’ => 3809,
‘first_name’ => ‘Joe’,
‘last_name’ => ‘Doe’,
)
);
?php
$last_names = array_column($a, ‘last_name’, ‘id’);
print_r($last_names);
?>
Как вывести массив в три колонки?
Но почему-то съезжают строки: Как еще можно корректно отобразить массив в три колонки? Подсказали банально, разбить массив на три части и впихнуть в три колонки (ячейки таблицы). ну разбил я длину массива на три PHP код:
$colum = round( count($html) / 3);
Я не Ванга, но у вас же тег table не закрыт. Тег tr внутри td. Это просто ночной кошмар табличных верстальщиков. Вот [тут][1] смотрите как работать с таблицами. [1]: htmlbook.ru/html/table
5 ответов 5
//variant 1. Читаем сначала первую колонку, потом вторую итп:
array_slice — разбиваете массив на нужное количество массива. Запускаете цикл с количеством итераций, равном длине наибольшей колонки. На каждой итерации запускаете внутренний цикл, достающий при помощи array_shift верхний(начальный) элемент каждой части массива и запихивающий в соответствующую ячейку таблицы.
Таблица при этом формируется все равно построчно.
//variant2: Читаем построчно:
построчно формируете таблицу, склеивая при помощи implode кусочки массива, длиной, равной числу столбцов. Кусочки извлекаете при помощи array_slice.
Привожу код, который я использую. Разбиение на 4 столбца. Думаю, понятно. Если нет, разъясню.
'; for($j=0;$j<$TagRows&&$i<$TagsCount;$j++,$i++) < $TagID=mysql_result($tags,$i,'id'); $TagValue=mysql_result($tags,$i,'value'); if($j) echo '
'; echo ' '.$TagValue; > echo ''; > ?>