2017-12-07 9 views
0

foreachの反復計算の処理に私のコードでチャンスがありました ステートメント。ポイントはどのように再帰的にするのですか?foreach PHPでの計算のための反復の処理

私はいつも同じコードを使用しています。 "HSPK"がある場合、計算には同じメソッド(foreach)が使用されます。この例では "5番目の計算"となります。機能

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

私はいくつかの修正を試してみると、私は多くのエラーと計算に直面しています。 – triawan

+0

私はちょうど編集を行いました。あなたはまだ誤算を受けると、それは私の誤解のためかもしれません。あなたが望む結果を説明し、どんなエラーをキャッチするかを説明する必要があるかもしれません。 – Ben

+0

大きなおかげで私の兄弟@ベン、あなたはそれを解決します。私は自分のコードを作ったが、私はそれをいかに要約するかわからない。 – triawan