有没有办法将字符串分解为变量,例如
some_function($min, $max, "3, 20");
这样 $min 被赋值为 3,$max 被赋值为 20。
我知道我可以简单地使用
$data = explode("3, 20");
只是想知道是否有另一种方法。
有没有办法将字符串分解为变量,例如
some_function($min, $max, "3, 20");
这样 $min 被赋值为 3,$max 被赋值为 20。
我知道我可以简单地使用
$data = explode("3, 20");
只是想知道是否有另一种方法。
PHP 的语言构造list()
可以通过分配一个数组来对变量(甚至是其他数组键)执行多个赋值。
list($min, $max) = explode(",", "3,20");
但是,您仍然需要将 atrim()
应用于您的变量,因为该$max
值将具有前导空格,或者替换explode()
为preg_split('/\s*,\s*/', $string)
以将其拆分为逗号和周围的空格。
注意:请谨慎使用list()
以确保您分配的数组包含与list()
变量相同数量的元素。
在PHP 5.x中,当直接将值分配给另一个数组时,作为该数组的一个元素,list()
值在 PHP 5.x 中从右到左分配,而不是从左到右。换句话说,您最终会得到向后填充的数组(最后一个值,第一个)。
https://www.php.net/manual/en/migration70.incompatible.php
在PHP 7.x list()
中,当将元素直接分配给数组时,参数是从左到右分配的。换句话说,您最终将第一个值作为接收者数组中的第一个元素。
<?php list($a[], $a[], $a[]) = [1, 2, 3]; var_dump($a); ?>
PHP 5.X Last value 获取第一个元素的位置,但接收者必须是一个数组(在本例中 $a,是数组)!
array(3) {
[0]=>
int(3)
[1]=>
int(2)
[2]=>
int(1)
}
PHP 7.x第一个值成为第一个数组元素。
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
从PHP 7.1 开始有一个新特性叫做
对称数组解构:速记数组语法 ([]) 现在可用于解构数组以进行赋值(包括在 foreach 中),作为现有 list() 语法的替代方案,该语法仍受支持。
这意味着您现在可以执行以下操作:
[$one, $two] = explode(";", "one;two");
echo $one; // one
echo $two; // two
作为 list() 的替代方案,我发现它自己是一个非常优雅且易读的解决方案,随 7.1+ 一起出现......它是相同的,但更好。
注意:正如引号所示,您可以使用简写数组语法([])在 foreach 声明中分配变量,但这与问题无关,所以请检查一下!
文档:https ://www.php.net/manual/en/migration71.new-features.php