Заполните динамическую таблицу из двух массивов

Первый массив содержит заголовки, а другой массив содержит данные для заполнения. Я могу создать заголовки, но у меня проблемы с заполнением данных в соответствии с заголовками.

$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>
Другие вопросы по тегам