如何在Yii中使用DataProvider和CGridView在数组数据中显示数组?

时间:2017-11-13 08:05:09

标签: php arrays yii

现在我有这样的代码:

$testArray1 = array(array(
                    'user_id'=>'1',
                    'name'=>array(
                        'david',
                        'haword'),
                    ),
                    array(
                    'user_id'=>'2',
                    'name'=>'andrew',
                    ),
            );

            print_r($testArray1);
            $arrayDataProvider = new CArrayDataProvider ($testArray1,array(
                //'KeyField'=>'_id',
                'pagination'=>array(
                    'pageSize'=>10,
                ),
                'sort'=>array(
                ),
            ));
            $this->widget('zii.widgets.grid.CGridView', array(
                'id' =>'BCImported-grid',
                'dataProvider' =>$arrayDataProvider,
                'columns' =>array('name'),
            ));

这是我的结果:

the result picture

所以表单只显示name = andrew,而name = david和haword不显示。 如何在Yii中使用DataProvider和CGridView在数组数据中显示数组,例如name = david和haword where' user_id' =>' 1'?

1 个答案:

答案 0 :(得分:0)

除了自定义该值之外,无法在CGridView中显示数组。 在模型中创建一些静态函数

public static function implodeName($data)
{
    if(isset($data['name'])) {
        if(is_array($data['name'])) {
            return implode(',', $data['name']);
        }
        else {
            return $data['name'];
        }
    }
    return '';
}

然后在CGridView中会像这样

 $this->widget('zii.widgets.grid.CGridView', array(
        'id' =>'BCImported-grid',
        'dataProvider' =>$arrayDataProvider,
        'columns' =>array(
            array(
              'header' => 'Names',
              'name' => 'name',
              'value' => 'YourModelName::implodeName($data)'
            ),
        ),
 ));

,结果应该是: 大卫,hawords