在这种情况下,一切都按预期进行:
$someString = '1|2|3|4';
list($val1, $val2, $val3, $val4) = explode("|", $someString);
在下面的场景中,$someString中的值比要放入它们的$vals中的值多:
$someString = '1|2|3|4|5|6';
list($val1, $val2, $val3, $val4) = explode("|", $someString);
我如何使$val4在第二种情况下为4|5|6,而不是仅为4,或者我如何将这些"剩菜"放在$val4的末尾,而不添加$val5、$val6等,使其为456?
PHP explode
函数可以接受第三个可选参数$limit
:
如果
limit
设置为正,则返回的数组将最多包含limit
个元素,最后一个元素包含其余的string
。如果
limit
参数为负,则返回除最后一个-limit
之外的所有组件。如果
limit
参数为零,则将其视为1
。
因此,根据这个逻辑,您应该使用explode("|", $someString, 4)
:
$someString = '1|2|3|4|5|6';
list($val1, $val2, $val3, $val4) = explode("|", $someString, 4);
echo $val1; // 1
echo $val2; // 2
echo $val3; // 3
echo $val4; // 4|5|6
在特定情况下,您可以使用explode
函数的限制子句。不过,总的来说,尽管我们可以让list()
任务发挥作用,但并没有一种干净的方法来捕捉它的"剩余部分"。
list()
的文档中说,返回值是指定的数组。
例如:
$arr = array('a', 'b', 'c', 'd', 'e');
var_dump(list($a, $b, $c) = $arr);
/*
array(5) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
*/
var_dump($a, $b, $c);
/*
string(1) "a"
string(1) "b"
string(1) "c"
*/
我们可以使用array_slice()
来提取剩余的和,同时进行赋值:
$leftovers = array_slice( list($a, $b, $c) = $arr, 3);
这与做具有相同的效果
$temp = operation_to_build_array();
list($a, $b, $c) = $temp;
$leftovers = array_slice($temp, 3);