您可以像在Java中一样在PHP中一次分配多个变量吗?

tra*_*roy 55 php variables

我想一次创建5个类型数组的变量.这可能吗?在Java中我知道你可以,但是找不到关于PHP的任何东西.我想做这样的事情:

$var1, $var2, $var3, $var4, $var5 = array();
Run Code Online (Sandbox Code Playgroud)

Gri*_*... 96

是的你可以.

$a = $b = $c = $d = array();
Run Code Online (Sandbox Code Playgroud)

  • FWIW,在*除了*PHP 之外的任何语言中,结果都将是引用*相同*数组的多个变量。也就是说,更改一个变量中的数组也会更改其他变量中的数组。在 PHP 中,因为数组赋值会“按值复制”(除非使用“引用运算符”),所以这会满足 OP 的要求 - 它创建 4 个数组值,每个变量一个。[我提到这一点,所以任何使用多种语言工作的人都会仔细考虑正在发生的事情,特别是如果他们在不同的语言中使用这种语法。] (8认同)

Miq*_*uel 17

$c = $b = $a;
Run Code Online (Sandbox Code Playgroud)

相当于

$b = $a;
$c = $b;
Run Code Online (Sandbox Code Playgroud)

因此:

$var1 = $var2 = $var3 = $var4=  $var5 = array();
Run Code Online (Sandbox Code Playgroud)

  • 你的答案令人困惑.等价物应该是:$ b = $ a; $ c = $ a; (5认同)
  • 上面的示例未使用原始示例中所述的分配,而是使用数组推送。数组推入的返回值是被推入的值,而不是被推入的数组。执行分配时,分配的返回值就是分配的变量。或者换种说法,数组推返回右侧,赋值返回左侧(无论如何等于右侧)。因此,在您的示例中,右数组推入将零推入左分配。您可以看到$ y的最终值也推了0。 (2认同)
  • @valiD我想你在这种情况下是错的。PHP 设置 $b 等于 $a,$c 等于 $b。它一步步传递值。所以米盖尔的对应部分是正确的。`$c = 1 + $b = $a = 1;` 使 $c 等于 2 而不是 1。 (2认同)

Fra*_*ois 9

$var1 = $var2 = $var3 = $var4=  $var5 = array();
Run Code Online (Sandbox Code Playgroud)


Ver*_*ant 6

我更喜欢使用列表功能来完成这项任务。这不是真正的函数,而是一种语言结构,用于在一次操作中分配变量列表。

list( $var1, $var2, $var3 ) = array('coffee', 'brown', 'caffeine');

有关更多信息,请参阅文档

  • 与[上面提到的](/sf/answers/3715699711/)较新的方括号表示法一样,这并不能回答OP问题。这不是将相同的值复制到所有变量,而是解析数组的各个值。 (2认同)

d4r*_*wel 5

从PHP 7.1开始,您可以使用方括号语法

[$var1, $var2, $var3, $var4, $var5] = array(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

[1] https://wiki.php.net/rfc/short_list_syntax
[2] https://secure.php.net/manual/de/migration71.new-features.php#migration71.new-features.symmetric-array -破坏

  • 注意:这种有用的技术产生的结果与接受的答案不同。接受的答案将整个数组放入每个变量中。*这个* 答案将第一个元素放入第一个变量,将第二个元素放入第二个变量,依此类推。因此`$var1 = 1; $var2 = 2; ...` 对于从函数返回多个值特别有用 - 将返回值放入数组中,然后按所示提取它们。 (6认同)