2017-12-07 3 views
0

foreach에서 반복 계산을 처리 할 수있는 기회가되었습니다. 문. 요점은 재귀 적으로 만드는 것입니다.foreach PHP에서 계산을위한 반복 처리

이 코드에서는 항상 "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; 
+0

재귀는 사용자가 자체적으로 함수를 호출한다는 의미입니다. 그렇다면'sum_hspk ($ input)'함수를'sum_hspk' 함수 안에 쓰지 않으시겠습니까? –

+0

@NicoHaase는 피드백에 감사드립니다. 기술은 벤에 의해 설명되어 있습니다. – triawan

답변

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 
+0

약간의 수정을 시도 할 때, 나는 많은 오류와 계산에 직면하지 않았습니다. 감사합니다. Ben. – triawan

+0

방금 ​​편집했습니다. 아직도 계산 오류가 발생하면 오해가 생길 수 있습니다. 결과를 설명하고 설명 할 오류가 무엇인지 설명해야 할 수도 있습니다. – Ben

+0

큰 형님 @ 벤, 당신이 해결했습니다. 나는 내 자신의 코드를 만들었지 만 요약하는 법을 모르겠다. – triawan