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

时间:2018-01-19 13:36:08

标签: php gridview yii yii2 yii2-advanced-app

首先,我有这样的观点。

查看:

'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 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

\yii\helpers\ArrayHelper::merge()implode()一起使用,您可以在一行中执行此操作。

关于\yii\helpers\ArrayHelper

递归合并两个或多个数组。

如果每个数组都有一个具有相同字符串键值的元素,后者将覆盖前者(与array_merge_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') ); 文件也有这些行来合并文件中的配置数组。

<Grid.ColumnDefinitions>
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
       <RowDefinition Height="*" />
       <RowDefinition Height="*" />
</Grid.RowDefinitions>