首先,我有这样的观点。
查看:
'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
如何更改或更新我的代码以获得预期结果?
答案 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>