【问题标题】:Handling repetition for calculation in foreach PHP在 foreach PHP 中处理重复计算
【发布时间】:2018-05-21 08:06:52
【问题描述】:

我有机会在我的代码中处理 foreach 中的重复计算 陈述。关键是如何进行递归?

在这段代码中我总是使用相同的代码,当有“HSPK”时,计算将有相同的方法(foreach),对于这个例子,我在“第五次计算”中推荐。

function sum_hspk($hspk_uraian_ssh_hspk_kode) {


        $ssh_total = 0;

        $ssh_total_2 = 0;

        $ssh_total_3 = 0;

        $harga_analisa_hspk = 0;

        $harga_analisa_satuan = 0;


        $hspk_reference = json_decode(get_hspk_reference_uraian_by_hspk_uraian_hspk_kode($hspk_uraian_ssh_hspk_kode));

        $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($hspk_reference->hspk_kegiatan_kode));


        foreach($hspk_uraian as $row) { // first foreach


            $hspk_uraian_koefisien = $row->hspk_uraian_koefisien;


            if($row->hspk_uraian_ssh_hspk_sumber == "SSH") { // first if

                $hspk_uraian_koefisien_ssh = $hspk_uraian_koefisien;

                $ssh = json_decode(get_ssh_detail_by_kode($row->hspk_uraian_ssh_hspk_kode));

                $ssh_total += ($ssh->ssh_uraian_harga * $hspk_uraian_koefisien_ssh);

            } elseif($row->hspk_uraian_ssh_hspk_sumber == "HSPK") {


                $hspk_uraian_koefisien_hspk_2 = $hspk_uraian_koefisien;

                $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($row->hspk_uraian_ssh_hspk_kode));


                foreach($hspk_uraian as $row) { // second foreach


                    $hspk_uraian_koefisien = $row->hspk_uraian_koefisien;

                    if($row->hspk_uraian_ssh_hspk_sumber == "SSH") { // second if

                        $hspk_uraian_koefisien_ssh = $hspk_uraian_koefisien;

                        $ssh = json_decode(get_ssh_detail_by_kode($row->hspk_uraian_ssh_hspk_kode));

                        $ssh_total_2 += ($ssh->ssh_uraian_harga * $hspk_uraian_koefisien_ssh);


                    }elseif($row->hspk_uraian_ssh_hspk_sumber == "HSPK") {


                        $hspk_uraian_koefisien_hspk_3 = $hspk_uraian_koefisien;

                        $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($row->hspk_uraian_ssh_hspk_kode));


                        foreach($hspk_uraian as $row) { // third foreach


                            $hspk_uraian_koefisien = $row->hspk_uraian_koefisien;

                            if($row->hspk_uraian_ssh_hspk_sumber == "SSH") {

                                $hspk_uraian_koefisien_ssh = $hspk_uraian_koefisien;

                                $ssh = json_decode(get_ssh_detail_by_kode($row->hspk_uraian_ssh_hspk_kode));

                                $ssh_total_3 += ($ssh->ssh_uraian_harga * $hspk_uraian_koefisien_ssh);


                            }else if($row->hspk_uraian_ssh_hspk_sumber == "HSPK") {

                                $hspk_uraian_koefisien_hspk_4 = $hspk_uraian_koefisien;

                                $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($row->hspk_uraian_ssh_hspk_kode));


                                foreach ($hspk_uraian as $row) { // fourth foreach


                                    $hspk_uraian_koefisien = $row->hspk_uraian_koefisien;

                                    if($row->hspk_uraian_ssh_hspk_sumber == "SSH") {

                                        $hspk_uraian_koefisien_ssh = $hspk_uraian_koefisien;

                                        $ssh = json_decode(get_ssh_detail_by_kode($row->hspk_uraian_ssh_hspk_kode));

                                        $ssh_total_4 += ($ssh->ssh_uraian_harga * $hspk_uraian_koefisien_ssh);

                                    }elseif($row->hspk_uraian_ssh_hspk_sumber == "HSPK") {

                                        // fifth handling

                                    } // end fourth if


                                } // end fourth foreach

                                $harga_analisa_satuan = ((($ssh_total_4) * 0.15) + ($ssh_total_4));

                                $harga_analisa_hspk = ($harga_analisa_satuan * $hspk_uraian_koefisien_hspk_3);

                                $ssh_total_3 += $harga_analisa_hspk;


                            } // end third if


                        } // end third foreach

                        $harga_analisa_satuan = ((($ssh_total_3) * 0.15) + ($ssh_total_3));

                        $harga_analisa_hspk = ($harga_analisa_satuan * $hspk_uraian_koefisien_hspk_3);

                        $ssh_total_2 += $harga_analisa_hspk;


                    }; // end second if


                } // end second foreach


                $harga_analisa_satuan = ((($ssh_total_2) * 0.15) + ($ssh_total_2));

                $harga_analisa_hspk = ($harga_analisa_satuan * $hspk_uraian_koefisien_hspk_2);

                $ssh_total += $harga_analisa_hspk;

            } // end first if



        } // end first foreach


        $harga_analisa_hspk = ((($ssh_total) * 0.15) + ($ssh_total));

        return $harga_analisa_hspk;


    } // end function

执行该函数的示例:

$test = sum_hspk('01.04');
echo $test;

【问题讨论】:

  • 递归意味着你只调用一个函数本身。那么为什么不在函数sum_hspk 中写sum_hspk($input) 呢?
  • @NicoHaase 感谢您的反馈,本技术已描述:)

标签: php loops recursion repeat


【解决方案1】:

要创建递归函数,您需要考虑基本情况是什么,以及您希望从函数中获得什么 (ssh_total)。在这种情况下,sum_hspk 从“SSH”和“HSPK”计算 ssh_total。 “SSH”是您的基本情况,您可以直接计算值。但是对于“HSPK”,它依赖于“SSH”和“HSPK”,因此,您需要进行自上而下的方法,直到找到基本情况“SSH”。您需要在“HSPK”条件下调用 sum_hspk。

您应该进行此更改以进行递归。

function get_ssh_total($row) {

    $ssh_total = 0;

    $hspk_uraian_koefisien = $row->hspk_uraian_koefisien;

    if ($row->hspk_uraian_ssh_hspk_sumber == "SSH") {

        $hspk_uraian_koefisien_ssh = $hspk_uraian_koefisien;

        $ssh = json_decode(get_ssh_detail_by_kode($row->hspk_uraian_ssh_hspk_kode));

        $ssh_total = ($ssh->ssh_uraian_harga * $hspk_uraian_koefisien_ssh);

    }
    else if ($row->hspk_uraian_ssh_hspk_sumber == "HSPK") {

        $hspk_uraian_koefisien_hspk_2 = $hspk_uraian_koefisien;

        $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($row->hspk_uraian_ssh_hspk_kode));

        foreach($hspk_uraian as $row) {

            $ssh_total_2 += get_ssh_total($row);

        }

        $harga_analisa_satuan = ((($ssh_total_2) * 0.15) + ($ssh_total_2));

        $harga_analisa_hspk = ($harga_analisa_satuan * $hspk_uraian_koefisien_hspk_2);

        $ssh_total += $harga_analisa_hspk;

    }

    return $ssh_total;

}

function sum_hspk($hspk_uraian_ssh_hspk_kode) {


    $ssh_total = 0;

    $ssh_total_2 = 0;

    $ssh_total_3 = 0;

    $harga_analisa_hspk = 0;

    $harga_analisa_satuan = 0;


    $hspk_reference = json_decode(get_hspk_reference_uraian_by_hspk_uraian_hspk_kode($hspk_uraian_ssh_hspk_kode));

    $hspk_uraian = json_decode(get_hspk_uraian_by_kegiatan($hspk_reference->hspk_kegiatan_kode));


    foreach($hspk_uraian as $row) { // first foreach

        $ssh_total += get_ssh_total($row);

    } // end first foreach


    $harga_analisa_hspk = ((($ssh_total) * 0.15) + ($ssh_total));

    return $harga_analisa_hspk;


} // end function

【讨论】:

  • 当我尝试进行一些修改时,我面临很多错误并且计算不准确,谢谢 Ben。
  • 我刚刚进行了编辑。如果你还是算错了,那可能是我的误会。你可能需要解释你想要得到什么结果,并解释你发现了什么错误。
  • 非常感谢我的兄弟@Ben,你解决了它。我编写了自己的代码,但我不知道如何总结它大声笑。
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 2017-01-24
  • 1970-01-01
  • 2017-10-03
  • 2018-09-13
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
相关资源
最近更新 更多