我有一列数据,其中包含一些数值,但有时其中包含 NULL 值,例如:
Name Algebra Band Chemistry
Abel 3 6 2
Baker 5 NULL 4
Charlie NULL 2 NULL
Delta 4 NULL NULL
是否可以创建一个排序对象,以便在 Score 的两个方向上,NULL 值始终位于末尾?那是,
Name Algebra [asc] Band Chemistry
Abel 3 6 2
Delta 4 NULL NULL
Baker 5 NULL 4
Charlie NULL 2 NULL
Name Algebra [desc] Band Chemistry
Baker 5 NULL 4
Delta 4 NULL NULL
Abel 3 6 2
Charlie NULL 2 NULL
编辑:我应该在这里添加一个说明——我正在使用 ArrayDataProvider 因为这是一个汇总表,所以我不能在数据库端做任何事情——数据已经加载到本地数组中并且没有更多的数据库查询。
EDIT2:我收到了一些代码和更多关于我正在使用的结构的请求。因此,我对上面的示例进行了编辑,使其更接近我的实际情况。源数据如下所示:
[MySQL table and Yii model "Scores"]
Name Class Score
Abel Algebra 3
Abel Band 6
Abel Chemistry 2
Baker Algebra 5
Baker Chemistry 4
Charlie Band 2
Delta Algebra 4
以下是代码的相关部分:
$data = [];
$items = Scores::find()->all();
foreach ($items as $item) {
$data[$item->name]['Name'] = $item->name;
$data[$item->name][$item->class] = $item->score;
}
$arrayData = ArrayHelper::toArray($data);
$arrayDataProviderInit = [
'allModels' => $arrayData,
'pagination' => [
'pageSize' => 0,
],
'sort' => [
'attributes' => [
'Name',
// WHAT GOES HERE????
],
],
];
$arrayDataProvider = new ArrayDataProvider($arrayDataProviderInit);
$gridViewInit = [
'dataProvider' => $arrayDataProvider,
'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => 'NULL'],
'columns' => [
'Name',
'Algebra',
'Band',
'Chemistry',
],
];
echo GridView::widget($gridViewInit);