$test = 'love';
$eff = end(explode('ov',$test));
我无法弄明白;奇怪的是,这不会引起抱怨:
$test = 'love';
$eff = current(explode('ov',$test));
我得到的错误是: 严格:只应通过引用传递变量
答案 0 :(得分:5)
end
通过将数组的内部指针移动到数组的末尾来更改它。因此,该参数必须是可变的(即对数组的引用)才能使该操作有用。这就是您收到警告的原因。
current
根本不接触阵列;它只看数组。因此,参数不需要是可变的(因此可以通过值传递)并且操作不会给出警告。
答案 1 :(得分:2)
explode
返回一个临时数组,您不是“存储”到变量,而是直接传递给需要引用的end
。
我认为current
不会触发错误的原因是它不会发生变异。其他变异函数如array_unshift
和reset
也会抱怨。
答案 2 :(得分:2)
end()
通过引用修改传递给它的数组。首先将爆炸分配给变量,以便end()
具有可以修改的引用。
$test = 'love';
$explosion = explode('ov',$test);
$eff = end($explosion);
end()
只更改内部指针,因此无论如何都不会修改数组的内容,除非您使用current()
,each()
,否则您不会注意到,迭代次数为next()
。
如果end()
的这种限制令你烦恼,可以采用一些方法:
function last($array) { return end($array); }
$test = 'love';
$eff = last(explode('ov', $test));
答案 3 :(得分:0)
<?php
error_reporting(E_STRICT);
$test = 'love';
$eff = end(explode('ov',$test));
var_dump($eff);
?>
如果您的错误报告级别未设置为E_STRICT
,它将正常工作。
请注意,当您返回临时数组时,您不能像这样设置内部指针。您需要先将其设置为变量,然后使用end()
将内部指针移动到末尾。
对于reset()
,next()
,prev()
等等,情况确实如此。
以下内容可行。
<?php
error_reporting(E_STRICT);
$test = 'love';
$a = explode('ov',$test);
$eff = end($a);
var_dump($eff);
?>
current()
有效,因为它不会移动内部指针,而是获取内部指针指向的当前元素。