我正在循环一个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;
}
答案 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
。