为什么在此示例中array()和[]的行为不相同

时间:2019-12-05 12:30:58

标签: php arrays

我有这段代码作为我无法完全理解的示例。
那么array()和[]完全一样吗?有人说[]可能比array()快一点,但这不是现在这个问题的主题。

代码如下:

function userLogin( $user, $return = null ) {

    [$user['username'],$user['password']] = [$user[0],$user[1]];

    switch ($return) {

        case 1:
            return $user['username'];

        case 2:
            return $user['password'];

        default:
            return $user['username'].":".$user['password'];

    }

}

print userLogin(['admin','secretkey']);

代码不起作用,我知道,因为我将其作为示例。 这个问题的主题是代码的第三行,我使用短数组语法为数组内的用户名和密码分配一些值,但是当我尝试执行相同的操作以使代码与PHP 5.3及更低版本。

array($user['username'], $user['password']) = array($user[0], $user[1]);

如果array()和[]相同,为什么array()在这种特定情况下不起作用?


控制台输出

短数组语法:

admin:secretkey

常规array()函数:

PHP Parse error:  syntax error, unexpected '=' in C:\Users\Soricy\Desktop\fn.userLogin.php on line 3
Parse error: syntax error, unexpected '=' in C:\Users\Soricy\Desktop\fn.userLogin.php on line 3

编辑1:

我完全知道要使用:

$user = array(
    'username' => $user[0],
    'password' => $user[1]
);

但是我有时想内联。


所以...

我是否可能错过了PHP Documentation about Arrays的东西?如果是,那是什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

您正在混淆。

数组创建语法如下:

$a = array(1,2,3);
$b = [1,2,3];
$a === $b; //true

-在这种情况下,array()[]完全相等。

您的示例:

[$user['username'],$user['password']] = [$user[0],$user[1]];

-称为Symmetric array destructuring,在PHP 7.1中引入,以代替list()。不能用array()替换,但是在较早的版本中可以用list()替换。