циклы — обработка повторений для расчета в foreach Stack Overflow

У меня есть шанс в моем коде обрабатывать вычисления повторений в 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;

0

Решение

Чтобы создать рекурсивную функцию, вам нужно подумать о том, что является базовым случаем и что вы хотите получить (ssh_total) из функции. В этом случае sum_hspk вычисляет ssh_total из «SSH» & «HSPK». «SSH» — ваш базовый случай, и вы напрямую рассчитываете значение. Но для «HSPK» это зависит от «SSH» и «HSPK», поэтому вам нужно использовать нисходящий подход, пока не будет найден базовый вариант «SSH». Вам необходимо вызвать sum_hspk в условиях «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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]