Заполните динамическую таблицу из двух массивов
Первый массив содержит заголовки, а другой массив содержит данные для заполнения. Я могу создать заголовки, но у меня проблемы с заполнением данных в соответствии с заголовками.
$columns =([0]=>firstname, [1]=>lastname, [2]=>class);
И данные.
$data=(
array[0](['firstname']=>kevin, ['lastname']=>kaburu, ['class']=>1)
array[1](['firstname']=>kevin, ['lastname']=>kaburu, ['class']=>1)
array[2](['firstname']=>kevin, ['lastname']=>kaburu, ['class']=>1)
array[3](['firstname']=>kevin, ['lastname']=>kaburu, ['class']=>1))
Позвольте мне сделать это более ясным
Дело в том, что у меня есть две таблицы, в первой есть столбцы, а в другой - записи, а внешний ключ указывает на столбец, к которому они принадлежат. Столбцы постоянно меняются, поэтому они чрезвычайно динамичны. Я хочу заполнить эти данные в таблице... дать мне доступные варианты.
3 ответа
Наконец мне удалось разобрать проблему.... Это мой код
action.php
`
$recdata = $sql->showuploadedrecords($evntid);
$coldata =$sql->showuploadedcols($evntid);
$colmns = array();
foreach ($coldata as $ky => $valu) {
$colname = $valu['column_name'];
$colmns[] = $colname;
}
$records = array();
$total = count($recdata)/count($colmns);
for ($i = 1; $i < $total +1; $i++) {
$one =array();
foreach ($recdata as $k => $v) {
if($v['relate_records']==$i){
$one[]=$v;
}
}
$records[] = $one;
}
$this->render('ViewUploaded', array('colmns' => $colmns,
'data' => $records));
}`
И на мой взгляд:
`echo '<tr role="row">';
foreach ($colmns as $value) {
echo '<th class="sorting_asc" role="columnheader" tabindex="0" aria-controls="DataTables_Table_2" rowspan="1" colspan="1" style="width: 219px;" aria-sort="ascending" aria-label="Rendering engine: activate to sort column descending">'. $value . '</th>';
}
echo '</tr>';
?>
</thead>
<?php
foreach ($data as $key => $v) {
echo '<tr>';
for ($k = 0; $k < count($colmns); $k++) {
foreach ($v as $cell) {
if($cell['column_name']== $colmns[$k]){
echo'<td>'.$cell['item'].'</td>';
}
}
}
echo '</tr>';
}
?>
</tbody>
</table>`
Вставьте это после декларации данных:
$dataProvider = new CArrayDataProvider($data, array(
//CDataProvider options, sort, etc..
));
измените вызов рендеринга, чтобы включить передачу dataProvider в ваше представление:
$this->render('view', array(
'dataProvider' => $dataProvider,
));
ввиду:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
// other CGridView options
)); ?>
Ссылка на эту ссылку:
http://www.yiiplayground.com/index.php?r=UiModule/dataview/gridViewArray
Вы можете создать gridview с использованием CArrayDataProvider
,
Эта ссылка содержит пример кода, который точно соответствует вашему требованию.
Без использования метода Yii:
<table>
<thead>
<tr>
<?php
foreach($columns as $s)
{
echo "<th>$s</th>";
}
?>
</tr>
<tbody>
<?php
foreach($data as $d)
{
echo "<tr>";
foreach($d as $cols)
echo "<td>".$cols."</td>";// hope all columns are present in second array.
echo "</tr>";
}
?>
</tbody>
</table>