【发布时间】:2020-09-15 03:46:53
【问题描述】:
有没有办法将字符串分解为变量,例如
some_function($min, $max, "3, 20");
$min 被赋值为 3,$max 被赋值为 20。
我知道我可以简单地使用
$data = explode("3, 20");
只是想知道是否还有其他方法。
【问题讨论】:
标签: php
有没有办法将字符串分解为变量,例如
some_function($min, $max, "3, 20");
$min 被赋值为 3,$max 被赋值为 20。
我知道我可以简单地使用
$data = explode("3, 20");
只是想知道是否还有其他方法。
【问题讨论】:
标签: php
PHP 的语言构造list() 可以通过分配一个数组来对变量(甚至是其他数组键)进行多次赋值。
list($min, $max) = explode(",", "3,20");
但是,您仍然需要将 trim() 应用于您的变量,因为 $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最后一个值获取第一个元素的位置,但是接收者必须是一个数组(本例中$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)
}
【讨论】:
list()的语言结构。但是 +1。
list() 是一个函数,我说这是函数 list()。微妙,但无论如何我会澄清:)
", " 并跳过整个 trim() 事情
从 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
【讨论】: