在PHP中,仅在变量具有值的情况下将其添加到数组中?

4

我在Yii2框架中向我的index视图传递变量。我有以下代码:

return $this->render('index', array(
    'userresult' => $userresult,
    'topresult' => $topresult,
    'result' => $result
));

仅在用户已登录时传递变量$userresult,因为如果用户未登录,则不存在$userresult变量。以下是我的尝试,但我无法使if语句运行:

return $this->render('index', array(
    if (!\Yii::$app->user->isGuest) { echo "'userresult' => $userresult"; },
    'topresult' => $topresult,
    'result' => $result
));

这怎么能实现呢?
1个回答

3

其中一种方法:

// Initial array
$params = [
    'topresult' => $topresult,
    'result' => $result,
];

// Conditionally add other elements to array
if (!\Yii::$app->user->isGuest) {
    $params['userresult'] = $userresult
}

return $this->render('index', $params);

混合使用echo和数组显然是错误的。你应该学习更多关于纯PHP数组的知识。
另外,你可以忘记array()语法,使用更短的变体[],因为Yii2需要PHP >= 5.4。
我认为最好传递null
return $this->render('index', [
    'userresult' => $userresult ?: null,
    'topresult' => $topresult,
    'result' => $result
]);

然后,您需要检查变量是否为null,或者只需在视图中使用if ($userresult) {...}。我认为这比在视图中使用isset更好。这样参数数量是恒定的。


这段代码应该放在我的配置文件还是当前的脚本中? - Sunday
在您当前的脚本中。另外请参考建议的替代方案。 - arogachev
1
好的,我刚在我的当前脚本上尝试了一下,它运行成功了。你太棒了!再次感谢你的帮助。 - Sunday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接