将字符串分解为变量

kay*_*fun 14 php

有没有办法将字符串分解为变量,例如

some_function($min, $max, "3, 20");
Run Code Online (Sandbox Code Playgroud)

这样,$ min被赋值为3,$ max被赋值为20.

我知道我可以简单地使用

$data = explode("3, 20");
Run Code Online (Sandbox Code Playgroud)

只是想知道是否还有另一种方式.

Mic*_*ski 27

PHP的语言构造list()可以通过分配数组来执行对变量(甚至其他数组键)的多个赋值.

list($min, $max) = explode(",", "3,20");
Run Code Online (Sandbox Code Playgroud)

但是,你仍然需要应用trim()到你的变量,因为该$max值将有一个前导空格,或更换explode()preg_split('/\s*,\s*/', $string)将它拆分的逗号和空白.

注意:请务必小心,list()以确保您指定的数组包含与list()变量相同数量的元素.它们在PHP 5.x中从右到左分配,而不是从左到右分配,因此如果您碰巧在左侧覆盖其右侧的原始内容,则可能会出现意外结果.这是PHP文档中的示例详细说明.

PHP 7更新: PHP 7更改了赋值顺序行为,list()以便从左到右分配参数

  • @DaveRandom我没有说`list()`是一个函数,我说_的函数是``list()`.微妙,但无论如何我会澄清:) (2认同)

pau*_*imx 5

PHP 7.1 开始,有一个新功能叫做

对称数组解构:现在可以使用简写数组语法 ([]) 来解构数组以进行赋值(包括在 foreach 中),作为现有 list() 语法的替代方法,该语法仍然受支持。

这意味着您现在可以执行以下操作:

[$one, $two] = explode(";", "one;two");
echo $one; // one
echo $two; // two
Run Code Online (Sandbox Code Playgroud)

作为 list() 的替代方案,我发现它自己是一个非常优雅且可读的解决方案,它随 7.1+ 一起出现......它是相同的,但更好。

注意:正如引号所示,您可以使用速记数组语法 ( [] ) 在 foreach 声明中分配变量,但这与问题无关,因此请查看!

文档:https : //www.php.net/manual/en/migration71.new-features.php