【问题标题】:How can I use DataProvider and CGridView in Yii to display array in array data?如何在 Yii 中使用 DataProvider 和 CGridView 在数组数据中显示数组?
【发布时间】:2017-11-13 08:05:09
【问题描述】:

现在我有这样的代码:

$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'),
            ));

这是我的结果:

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

【问题讨论】:

    标签: php arrays yii


    【解决方案1】:

    没有办法在 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)'
                ),
            ),
     ));
    

    结果应该是: 大卫,哈沃斯

    【讨论】:

    • 谢谢。但我认为应该是if(isset($data[0]['name'])) 对吧?现在我的代码是 'value' => '"'.implodeName($data[0]).'"', 但现在它只显示 $data[0] 的“名称”,我不知道如何显示 $data[0] 和 $data[1] 的“名称”。你能帮帮我吗请问?
    • 您不必将 $data[0] 传递给 implodeName() 函数,只需将 $data 传递给它自己,该函数已经处理了它,并且在您的 CArrayDataProvider 实例中尝试在之前添加 id 属性分页'id' => 'user_id'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多