Php Yii2 Gridview不区分大小写的可排序列

Php Yii2 Gridview不区分大小写的可排序列,php,yii2,Php,Yii2,我使用yii2,我想以不区分大小写的方式对gridview列“description”进行排序。这是我的代码: $dataProvider = new ArrayDataProvider([ 'allModels' => $query->find(), 'sort' => [ 'attributes' => ['name','description], ], 'pagination' => [ 'pageSize' =

我使用yii2,我想以不区分大小写的方式对gridview列“description”进行排序。这是我的代码:

$dataProvider = new ArrayDataProvider([
    'allModels' => $query->find(),
    'sort' => [
    'attributes' => ['name','description],
    ],
    'pagination' => [
    'pageSize' => $this->pageSize,
    ],
]);
当我点击列描述进行排序时,它显示如下:

  • 职称
  • 医生
  • 老师
  • 医生
  • 老师

正如您所看到的,排序区分大小写我想排序不区分大小写,我如何做到这一点?有什么想法吗?

为了以不区分大小写的方式对ArrayDataProvider的行进行排序您应该扩展ArrayDataProvider本身,因为它在内部使用ArrayHelper::multisort,如果您希望它以您想要的方式进行排序,您必须将
sort_STRING | sort_FLAG_case
作为该方法的第四个参数传递。默认情况下,其值等于
SORT_REGULAR
常量

以下是实施情况:

<?php

namespace app\dataproviders;

use yii\helpers\ArrayHelper;

/**
 * Class ArrayDataProvider
 */
class ArrayDataProvider extends \yii\data\ArrayDataProvider
{

    /** @inheritdoc */
    protected function sortModels($models, $sort)
    {
        $orders = $sort->getOrders();
        if (!empty($orders)) {
            ArrayHelper::multisort(
                $models,
                array_keys($orders),
                array_values($orders),
                SORT_STRING | SORT_FLAG_CASE
            );
        }

        return $models;
    }
}

阿克马尔写的很好

如果actionColumn工作不正常,可能需要指定ArrayDataProvider的键,以获得正确的id

$dataProvider = \app\dataproviders\ArrayDataProvider([
   'allModels' => $query->find(),
   'key'=> 'id',
如果要在gridview中过滤数据,可以使用以下解决方案: 我也试过了,效果很好!! (最后一个技巧是:如果您想以区分大小写的方式进行过滤,可以使用stripos而不是strpo)。 祝你好运

$dataProvider = \app\dataproviders\ArrayDataProvider([
   'allModels' => $query->find(),
   'key'=> 'id',