如何在php中获取foreach中的最后一个数组值?

如何在php中获取foreach中的最后一个数组值?,php,foreach,Php,Foreach,我的代码是 $totals = []; foreach ($student_due_fee as $key => $fee) { foreach ($fee->fees as $fee_key => $fee_value) { $group_id = $fee_value->fee_groups_id; if(!isset($totals[$group_id])){ $totals[$group_id] = $

我的代码是

    $totals = [];

    foreach ($student_due_fee as $key => $fee) {
    foreach ($fee->fees as $fee_key => $fee_value) {

    $group_id = $fee_value->fee_groups_id;

    if(!isset($totals[$group_id])){

       $totals[$group_id] = $fee_value->amount;
       }else{

       $totals[$group_id] += $fee_value->amount;
       print_r($totals);
     }
   }
  }
输出是,

Array ( [69] => 3000 ) 
Array ( [69] => 6000 ) 
Array ( [69] => 6000 [70] => 3500 ) 
Array ( [69] => 6000 [70] => 4500 ) 
这里我需要得到最后一个值作为最终结果

Array ( [69] => 6000 [70] => 4500 ) 
如何在不移出foreach循环的情况下获取最后一个数组值

结果的图像

在这里,我根据组计算金额总和,并将其存储到foreach中的$totals中,我需要显示打印($totals)时的最终结果,即
数组([69]=>6000[70]=>4500)

$fee->fees的输出为

Array ( [0] => stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 74 [amount] => 1000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 1 [code] => ISEMTUTION [type] => I SEM TUTION FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) [1] => stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 75 [amount] => 2000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 2 [code] => IITUTION [type] => II SEM TUTION FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) [2] => stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 76 [amount] => 3000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 3 [code] => SPORTS [type] => SPORTS FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) ) 

Array ( [0] => stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 77 [amount] => 2000.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 7 [code] => MAGAZINE [type] => MAGAZINE, PHOTOS,BAG, ID etc [student_fees_deposite_id] => 0 [amount_detail] => 0 ) [1] => stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 78 [amount] => 1500.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 8 [code] => SCHOLASTICS [type] => CO - SCHOLASTICS [student_fees_deposite_id] => 0 [amount_detail] => 0 ) [2] => stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 79 [amount] => 1000.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 9 [code] => BOOKSUNIFORM [type] => BOOKS, NOTEBOOKS, UNIFORM [student_fees_deposite_id] => 0 [amount_detail] => 0 ) ) 
$fee_值的输出为

stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 74 [amount] => 1000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 1 [code] => ISEMTUTION [type] => I SEM TUTION FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 

stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 75 [amount] => 2000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 2 [code] => IITUTION [type] => II SEM TUTION FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 

stdClass Object ( [id] => 19 [student_session_id] => 278 [fee_session_group_id] => 15 [is_active] => no [created_at] => 2018-04-17 05:18:41 [fee_groups_feetype_id] => 76 [amount] => 3000.00 [due_date] => 2018-04-24 [fee_groups_id] => 69 [name] => Ist Term - LKG [feetype_id] => 3 [code] => SPORTS [type] => SPORTS FEES [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 

stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 77 [amount] => 2000.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 7 [code] => MAGAZINE [type] => MAGAZINE, PHOTOS,BAG, ID etc [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 

stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 78 [amount] => 1500.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 8 [code] => SCHOLASTICS [type] => CO - SCHOLASTICS [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 

stdClass Object ( [id] => 65 [student_session_id] => 278 [fee_session_group_id] => 16 [is_active] => no [created_at] => 2018-04-17 05:20:20 [fee_groups_feetype_id] => 79 [amount] => 1000.00 [due_date] => 2018-04-24 [fee_groups_id] => 70 [name] => IInd Term - LKG [feetype_id] => 9 [code] => BOOKSUNIFORM [type] => BOOKS, NOTEBOOKS, UNIFORM [student_fees_deposite_id] => 0 [amount_detail] => 0 ) 
为什么不呢

end($fee->fees)
这将为您提供阵列中的最后一项。

我将使用

代码示例是

$test = array('test1', 'test2', 'test3');

echo end($test);

输出将是test3

您可以使用
count()
函数获取案例“4”中的数组值数

$arrCount = count($array); # will equal 4 for OP
$arrCount = $arrCount - 1;
echo $array[$arrCount]; # last value in the array

您可以像这样使用名为
end()
的php默认数组函数

<?php
   $people = array("Peter", "Joe", "Glenn", "Cleveland");
   echo end($people); 
?>
这是一个链接,你可以在这里签出这个东西


正如Andreas所建议的,wwe也可以使用
数组_slice()
以不同的方式进行相同的操作。

正如我在评论中发布的以及其他人在答案中发布的一样,end效果很好。
但我喜欢使用over-end,因为您可以指定需要多少项

$arr = array(array ( 69 => 3000 ),
array ( 69 => 6000 ),
array ( 69 => 6000, 70 => 3500 ),
array ( 69 => 6000, 70 => 4500 ));

var_dump(array_slice($arr, -1)); // last item
echo "\n\n";
var_dump(array_slice($arr, -2)); // last two items
数组_切片中的负数表示它从n个项目的末尾开始计数


编辑:

$totals = [];

foreach ($fee->fees as $fee_key => $fee_value) {

$group_id = $fee_value->fee_groups_id;

if(!isset($totals[$group_id])){

   $totals[$group_id] = $fee_value->amount;
   }else{

   $totals[$group_id] += $fee_value->amount;

 }

}
print_r($totals);
//var_dump(array_slice($fee->fees, -1));

正如下面评论中所提到的,$totals是一个数组,因此在循环后打印它应该会得到预期的输出。

基于您编辑的文章和附加的foreach循环:

如果您需要上一个foreach循环中的输出,您首先需要知道$student\u due\u fee的计数,并与计数器进行比较:

stdClass Object
(
    [0] => stdClass Object
        (
            [fees] => stdClass Object
                (
                    [0] => stdClass Object
                        (
                            [fee_groups_id] => 69
                            [amount] => 1000
                        )

                    [1] => stdClass Object
                        (
                            [fee_groups_id] => 69
                            [amount] => 2000
                        )

                    [2] => stdClass Object
                        (
                            [fee_groups_id] => 70
                            [amount] => 1000
                        )

                )

        )

    [1] => stdClass Object
        (
            [fees] => stdClass Object
                (
                    [0] => stdClass Object
                        (
                            [fee_groups_id] => 69
                            [amount] => 3000
                        )

                    [1] => stdClass Object
                        (
                            [fee_groups_id] => 70
                            [amount] => 2000
                        )

                    [2] => stdClass Object
                        (
                            [fee_groups_id] => 70
                            [amount] => 1500
                        )

                )

        )

)
数一数你的物品

$count = count((array)$student_due_fee);
从0开始您的$counter

$counter = 0;
foreach ($student_due_fee as $fee) {
    foreach ($fee->fees as $fee_value) {

        $group_id = $fee_value->fee_groups_id;

        if(!isset($totals[$group_id])){

            $totals[$group_id] = $fee_value->amount;
        }   else    {

            $totals[$group_id] += $fee_value->amount;
        }
    }
    $counter++;
    if ($counter == $count) {
        echo "\r\n";
        print_r($totals);
    }    
}
输出:

Array
(
    [69] => 6000
    [70] => 4500
)


好的,但你为什么要在这里告诉我们?很抱歉,因为某些原因,它被截断了>-好的,如果你想提出一些建议,那么这就可以作为一个完美的答案(尽管你应该在问题中包含一个代码示例,而不仅仅是一个链接)…但是,同样的答案在几分钟前就发布了。当我最初写答案时,它还没有发布。。。对不起,我想这很公平。但是,您应该编辑它,以消除不能评论的缺点(这是不相关的,无论如何,这是一个确定的答案),直接包含一个代码段,并进行编辑,以使链接描述有意义。解释总是好的,所以人们理解你的推理。Kishan上面的答案是一个值得模仿的模型。我看到其他答案用更少的代码完成了这一点,我也从我这边学到了:)当你有一个名为
end()
的函数时,为什么要使用如此混乱的代码:D@KishanOza在哪方面更混乱?它是末端还是数组?它仍然只是一个函数。是的,但是当你只想要最后一个元素时,为什么要走这么远呢??)开玩笑吧,兄弟,你也是对的:)@KishanOza我通常不喜欢每次编码都重新发明轮子。我通常尝试使用可以用于许多应用程序的函数,而不仅仅是一个。“结束”仅适用于最后一项。Array_slice可以在更多的情况下工作。最重要的是,您的代码无法工作,因为您试图回显array@ManiRaj见我对上述主要问题的评论。到目前为止,你一直在要求两件相互矛盾的事情,这可以解释安德烈亚斯(和我)的困惑。由于您进行了编辑,答案非常简单,只需更改打印语句的位置即可。要么你把术语弄糊涂了,要么你不明白你的代码正在打印同一内容的多个版本。我需要输出,比如foreach循环内的
Array([69]=>6000[70]=>4500)
。你仍然可以在循环内使用相同的函数。。如果我误解了什么,请纠正我@ManiRaj@ManiRaj为此,您可以使用print_r而不是echo,如果您需要精确的输出以方便使用,您可以提供一个示例对象吗$费用->fees@ADyson别让他接近你。只需深呼吸,点击向下按钮,然后呼气。你会感觉好多了。我只是自己尝试过。我不明白为什么在foreach内部进行输出对您很重要-您正在打印整个数组,因此如果您在foreach内部打印它,每次循环运行时都会看到它。但是你说你只想看一次,最终版本。要做到这一点,您必须将打印内容移出循环。我不明白截图与代码或你的问题有什么关系。你最好删除你的问题,重新考虑一遍,然后开始一个新的问题,这个问题实际上提供了清晰的信息。我投票决定结束这个问题,因为它不清楚,因为似乎每个看到它的人都感到困惑。就连曼吉也似乎很困惑@Andreas就我所知,我们从来没有得到过输入数组?问题是这个表是输出,但与代码示例生成的输出完全无关。对我来说,它显示为,
数组([69]=>6000)数组([69]=>6000[70]=>4500)
,我已经尝试了你所说的,但是有额外的数组([69]=>6000)第一行..你有嵌套的foreach吗?很抱歉没有添加,是的,我有嵌套的foreach,我是PHP新手,所以请原谅并帮助我。。用嵌套foreach更新了问题..我能说的就是检查您的实现。我已经提供了一个样本对象和一个小提琴。@ ManiRaj,请接受答案,或者我认为我的答案无济于事,这个答案将被删除。老实说,我觉得帮助别人很糟糕。你可以从其他得到帮助的人身上看到挫折感。
Array
(
    [69] => 6000
    [70] => 4500
)