PHP数组中的简写

时间:2015-11-11 17:30:40

标签: php arrays if-statement yii

如果在PHP数组中无法正常工作,即使我在括号中包含true,也是如此。

工作代码:

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'items' => [ 
        Yii::$app->user->isGuest ?
            ['label' => 'Login', 'url' => ['/site/login']] :
            [
                'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
                'url' => ['/site/logout'],
                'linkOptions' => ['data-method' => 'post']
            ],
    ],
]);

无效代码:

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'items' => [ 
        Yii::$app->user->isGuest ?
            (['label' => 'Registrieren', 'url' => ['/site/register']],
            ['label' => 'Login', 'url' => ['/site/login']]) :
            [
                'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
                'url' => ['/site/logout'],
                'linkOptions' => ['data-method' => 'post']
            ],
    ],
]);

我明白问题是什么,但无法找到解决问题的方法。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您必须让代码的每个部分都评估为合法的 - 这不合法:

Yii::$app->user->isGuest ?
        (['label' => 'Registrieren', 'url' => ['/site/register']],
        ['label' => 'Login', 'url' => ['/site/login']])

因为它会评估为

['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]

只有在他们是整个事物的另一组[]时才有效 - 例如,你不能这样做:

$x = ['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']];

但你可以做到

$x = [
    ['label' => 'Registrieren', 'url' => ['/site/register']],
    ['label' => 'Login', 'url' => ['/site/login']]
];

您的代码需要更像

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'items' => Yii::$app->user->isGuest ? 
            [ 
                ['label' => 'Registrieren', 'url' => ['/site/register']],
                ['label' => 'Login', 'url' => ['/site/login']]
            ] :
            [
               [
                'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
                'url' => ['/site/logout'],
                'linkOptions' => ['data-method' => 'post']
               ]
            ]
]);

答案 1 :(得分:-1)

这一行看起来不对:

(['label' => 'Registrieren', 'url' => ['/site/register']]

你有一个左大括号'('但是两个关闭'''大括号,你可能想要删除其中一个