Не очень изящно конечно.
_form.php
echo '<div class="column">';
echo CHtml::label($rows[$i]['name'], $rows[$i]['name']);
echo CHtml::textField("elem[$id][val][]", $val, array('id' => $rows[$i]['name']));
echo '</div>';
echo '<div class="column" style="display:none">';
echo CHtml::textField("elem[$id][type][]", $type, array('id' => $rows[$i]['name']));
echo '</div>';
получим примерно следующий хтмл код
<div class="column">
<label for="Вагонов">Вагонов</label>
<input id="Вагонов" type="text" name="elem[5][val][]" value="">
</div>
<div class="column" style="display:none">
<input id="Вагонов" type="text" name="elem[5][type][]" value="int">
</div>
контроллер
if (isset($_POST['elem']))
{
$command = Yii::app()->db->createCommand();
$max = Yii::app()->db->createCommand()
->select('max(id) as max')
->from('a_analiz_create')
->queryScalar();
$Ids = $_POST['elem'];
$cnt = max(array_keys($Ids));
$min = min(array_keys($Ids));
for($i = $min; $i <= $cnt; $i++)
{
$type = $Ids[$i]['type'][0];
$val = $Ids[$i]['val'][0];
if ($type == 'float')
{
(real)$val = str_replace(',','.',$val);
}
else if ($type == 'int')
{
$val = (int)$val;
}
if (isset($val) && !empty($val))
$command->insert('a_analiz_data', array(
'analiz_id' => $max,
'value' => $val,
'elem_id' => $i,
'user_id' => Yii::app()->user->id,
));
}
};