我想使用此代码评估后缀表达式。
$test = array(1,2,"+",3,"+"); // this condition works
$test = array(1,2,3,"+","+"); // this condition fails
foreach($test as $key=>$val){
var_dump($test);
if($val == "+"){
$test[$key] = $test[$key-1] + $test[$key-2]; //uses previous keys
unset($test[$key-1]);
unset($test[$key-2]);
}
}
我正在使用上面的代码,但我的代码在这种情况下失败了。
iteration 1
array (size=5)
0 => int 1
1 => int 2
2 => int 3
3 => string '+' (length=1)
4 => string '+' (length=1)
iteration 2
array (size=3)
0 => int 1
3 => int 5
4 => string '+' (length=1) // code fails here because key 2 is not available
有没有办法可以访问以前的键而不必从当前键中减去?
或者在 foreach 循环的每次迭代后重新排序键的方法?
我知道我可以在 if 条件结束后添加另一个循环来获取以前的密钥。但是如果可能的话,我希望以更好的方式做到这一点
答案 0 :(得分:1)
您($i=0; $i <count($array); $i++);
和$array[$i - 1]
,您可以访问上一个元素。
以下是一个例子:
$cnt = count($test);
for ($i = 0; $i < $cnt; $i++) {
echo "current item: " . $test[$i - 1] ."\n";
if ($i != 0) {
echo "previous item: " . $test[$i - 1]."\n";
}
}
答案 1 :(得分:0)
prev($array)
应该在foreach循环中完成这个技巧。
http://php.net/manual/en/function.prev.php
请注意,此功能会更改阵列的内部位置。使用next,prev,end和reset是更改指针的官方方式,实际上是foreach在内部使用的方式。