除了最后一次迭代之外,确定并执行foreach循环中的内容

时间:2016-03-23 10:03:19

标签: php foreach

我正在循环一个foreach,我需要做一些像这样的逻辑: 如果迭代不是最后一次。收集价格。当迭代是最后一次。从收集的价格中减去总数。除了最后一次迭代价格。我没有得到以下代码。但它没有用。

    $i = 0;
    $credit = '';
    $count = count($reslist);

    foreach ($reslist as $single_reservation) {
            //All of the transactions to be settled by course
            //$credit             = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value');

            if ($i > $count && $single_reservation != end($reslist)) {
                $gather_sum_in_czk += $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value');
                $credit             = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value');
            }
            //Last iteration need to subtract gathered up sum with total.
            else {
                $credit = $suminczk - $gather_sum_in_czk;
            }
    $i++;
    }

编辑:尝试收集所有相互作用的价格:

          if ($i != $count - 1 || $i !== $count - 1) {
                $gather_sum_in_czk += $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value');
                $credit             = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value');
            }

            else {
                $credit = $suminczk - $gather_sum_in_czk;
            }

2 个答案:

答案 0 :(得分:1)

SPL CachingIterator始终是其内部iterator背后的一个元素。因此,它可以通过->hasNext()报告它是否会生成下一个元素 对于示例,我选择generator来证明此方法不依赖于任何其他数据,例如计数($数组)。

<?php
// see http://docs.php.net/CachingIterator
//$cacheit = new CachingIterator( new ArrayIterator( range(1,10) ) );
$cacheit = new CachingIterator( gen_data() );

$sum = 0;                  
foreach($cacheit as $v) {
    if($cacheit->hasNext()) {
        $sum+= $v;
    }
    else {
        // ...and another operation for the last iteration
        $sum-=$v;
    }
}

echo $sum; // 1+2+3+4+5+6+7+8+9-10 = 35


// see http://docs.php.net/generators
function gen_data() {
    foreach( range(1,10) as $v ) {
        yield $v;
    }
}

答案 1 :(得分:0)

foreach - PHP中的数组返回键(纯数组的整数索引)和值。为了能够使用该值,请使用以下构造:

foreach ($array as $key => $value) {
...
}

然后你可以检查是否$key >= count($array) - 1(记住在一个从0开始的数组中,最后一个元素是count($array) - 1

您的原始代码几乎可以正常工作,只是if条件错误。使用$i >= $count - 1代替$i > $count