如何使用 ActiveDataprovider 在 Yii2 GridView 中显示数组数据?

How to display array data in Yii2 GridView using ActiveDataprovider?

在我的数据库中,

"email" : [ 
    "amnop@mailinator.com", 
    "abc@mail.com"
],

当我print_r($model->email), 它显示

Array ( [0] => amnop@mailinator.com [1] => abc@mail.com )

在我的 GridView 中,

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        ----
        'columns' => [
                     -----
                    'price',
                    [
                         'attribute' => 'email',
                          'value' => function($model) {
                              //I need help here... I prefer any foreach function
                        }
                    ],

                    -----
        ]
?>

我必须在同一列中显示所有电子邮件。如何做到这一点?

编辑

我使用 ActiveDataprovider 因为我从我的数据库中获取值。

假设你有一个数组

$data = [
    ['email' => 'amnop@mailinator.com'],
    ['email' => 'abc@mail.com'],
    ...
    ['email' =>  'youremail100@mail.com'],
];

您可以使用 ArrayDataProvider

$provider = new ArrayDataProvider([
    'allModels' => $data,
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'attributes' => [ 'email'],
    ],
]);

像往常一样将数据提供者发送到

所以在 gridview 中你可以使用 ,

  <?= GridView::widget([
          'dataProvider' => $dataProvider,
          ----
          'columns' => [
                       -----
                      'price',
                      [
                           'attribute' => 'email',
                            'value' => function($model) {
                                //I need help here...
                          }
                      ],

                      -----
          ]
  ?>

你可以看看yii2指南https://www.yiiframework.com/doc/guide/2.0/en/output-data-providers 和文档 https://www.yiiframework.com/doc/api/2.0/yii-data-arraydataprovider

根据您想要实现的目标,您可以直接内爆电子邮件数组:

[
     'attribute' => 'email',
     'value' => function($model) {
          if (is_array($model->email)) {
              return implode(', ', $model->email);
          }

          return $model->email;
    }
],