访问阵列中的先前键

时间:2014-11-07 11:04:37

标签: php

我想使用此代码评估后缀表达式。

$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 条件结束后添加另一个循环来获取以前的密钥。但是如果可能的话,我希望以更好的方式做到这一点

2 个答案:

答案 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在内部使用的方式。