在 foreach PHP 中处理重复计算
Handling repetition for calculation in foreach PHP
我有机会在我的代码中处理 foreach 中的重复计算
陈述。重点是如何进行递归?
在此代码中我总是使用相同的代码,当存在 "HSPK" 时,计算将具有相同的方法 (foreach),对于此示例,我推荐 "fifth calculation"。
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;
做一个递归函数,你需要考虑什么是基本情况,你想从函数中得到什么(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
我有机会在我的代码中处理 foreach 中的重复计算 陈述。重点是如何进行递归?
在此代码中我总是使用相同的代码,当存在 "HSPK" 时,计算将具有相同的方法 (foreach),对于此示例,我推荐 "fifth calculation"。
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;
做一个递归函数,你需要考虑什么是基本情况,你想从函数中得到什么(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