17

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

some_function($min, $max, "3, 20");

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

我知道我可以简单地使用

$data = explode("3, 20");

只是想知道是否有另一种方法。

4

2 回答 2

41

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 手册

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 手册

于 2012-04-05T13:40:32.687 回答
7

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

于 2020-04-01T06:53:05.017 回答