代码之家  ›  专栏  ›  技术社区  ›  5.1tat

如何在gridview yii2中合并两列或多列时跳过空列

  •  0
  • 5.1tat  · 技术社区  · 7 年前

    首先,我有这样的观点。

    查看:

    'label' => 'xxx',
    'encodeLabel' => False,
    'value' => function($q) use ($aaa, $bbb){
               $c = isset($bbb[$q->something->classId]) ? $bbb[$q->something->classId] : "";
               $d = isset($aaa[$q->something->familyId]) ? $aaa[$q->something->familyId] : "";
               return  $c . "." . $d . "." . $q->something->someName . "." . $q->something->someName;
    },
    'attribute' => 'xxx',
    'filter' => $yyy,
    

    我想做的是,

    我取四列并将它们合并到一列中。 结果如下所示: x.y.z.a 当某列为空时,它看起来像: x..z.a

    我需要什么: 显示合并值时,如果某列有空值,而不是如下输出: x、 。。z、 a 我想在它们空的时候避开空间,如下所示: x.z.a

    预期结果:

    x、 z.a.公司 而不是 x、 。。z、 a

    如何更改或更新代码以获得预期结果?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Sam    7 年前

    使用 implode() : http://php.net/implode ,可以选择与某些筛选相结合。

    function($q) use ($aaa, $bbb){
        return implode('.', array_filter([
            $bbb[$q->something->classId] ?? null,
            $aaa[$q->something->classId] ?? null,
            $q->something->someName,
            $q->something->someName
    
        ]);
    }
    

    这不是特定于Yii2或gridview的。

    请注意 null coalesce 操作员,我在这里使用它的方式相当于 isset($a) ? $a : $b .

        2
  •  0
  •   Community CDub    4 年前

    使用 \yii\helpers\ArrayHelper::merge() 以及 implode() 你可以在一行中完成。

    关于 \yii\helpers\ArrayHelper

    将两个或多个数组递归合并为一个数组。

    如果每个数组都有一个具有相同字符串键值的元素,则后者将覆盖前者(与array\u merge\u recursive不同)。如果两个数组都具有数组类型的元素并且具有相同的键,则将执行递归合并。对于整数键控元素,后一个数组中的元素将附加到前一个数组中。您可以使用 yii\helpers\UnsetArrayValue 对象从上一个数组中取消设置值,或 yii\helpers\ReplaceArrayValue 强制替换以前的值,而不是递归合并。

    假设我有以下数组 $b 作为一个空数组,我想将它们全部合并。

    $a = ['a'];
    $b = [];
    $c = ['c'];
    $d = ['d'];
    
    echo implode('.',\yii\helpers\ArrayHelper::merge($a, $b, $c, $d));
    

    将输出上述代码 a.c.d

    除以上所有内容外,您还可以使用 ArrayHelper::getColumn() 如果要使用列从数组中提取单个列的值,也可以获取列中列出的所有值。指上述使用的阵列 $a,$b,$c and $d 可以使用从数组中提取 ArrayHelper::getColumn() .

    $array = [
        ['id' => '123', 'data' => 'abc'],
        ['id' => '345', 'data' => 'def'],
    ];
    $result = ArrayHelper::getColumn($array, 'id');
    // the result is: ['123', '345']
    

    即使是你的默认值 frontend/web/index.php 文件中有以下行用于合并文件中的配置数组。

    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'),
        require(__DIR__ . '/../../common/config/main-local.php'),
        require(__DIR__ . '/../config/main.php'),
        require(__DIR__ . '/../config/main-local.php')
    );