在这种情况下,一切都按预期工作:
$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?
答案 0 :(得分:3)
PHP explode
function可以接受名为$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
答案 1 :(得分:1)
在您的特定情况下,您可以使用explode
函数的限制条款。但总的来说,尽管我们可以让它发挥作用,但没有一种清晰的方式来捕捉list()
任务的“剩余”。
The documentation of 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);