2017-05-10 17 views
0

저는 스키 클럽 회원이 장비를 대여 할 수있는 상점을 운영합니다. 첫 번째 단계는 구성원이 반복 선택을 할 수있는 루프입니다 (예 : 그와 그의 가족을 위해). 각 재료 라인에는 바닥에 총합이있는 자체 총계가 있습니다. 마지막 임대가 완료되고 회원이 지불을 완료하기를 원하면 문제가 발생합니다. 마지막으로 임대 한 장비의 라인이 두 배가되고 결과적으로 총계가 거짓입니다. 이것을 해결하는 방법. 내 UNSET 교육과 관련이 있다고 생각합니다. 도와 줘서 고맙다. 여기 내 foreach는 루프의 코드 : 커뮤니티 쉽게 시뮬레이션 할 수 있도록 모든foreach 후에 PHP가 해제 됨

foreach ($price as $key => $value) { 
    $number[$key] = str_pad($number[$key], 2); 
    $type[$key] = str_pad($type[$key], 21); 
    $lenght[$key] = str_pad($lenght[$key], 15); 
    $boots[$key] = str_pad($boots[$key], 22); 
    $size[$key] = str_pad($size[$key], 15); 
    $priceskipers[$key] = ($priceski[$key]) * ($person[$key]); 
    $pricebootspers[$key] = ($priceboots[$key]) * ($person[$key]); 
    $total[$key] = array_sum(array($priceskipers[$key], $pricebootspers[$key])); 
    $supertotal = 0; 
    $id++; 
    echo "<pre>Data : " .$date[$key] . " | " . $number[$key] . "/" . $person[$key] . "| " . $type[$key] . " | " . $lenght[$key] . " | " . $boots[$key] . " | " . $size[$key] . "<br> " . $priceskipers[$key] . " + " . $pricebootspers[$key] . " = " . $total[$key] . " for this reservation (id" . $id . ").<hr></pre>";  
     unset($value); 
     foreach ($total as $key2 => $value2) { 
    $supertotal += $total[$key2]; 
    $discount = (($supertotal) * 0.2); 
    $grandtotal = (($supertotal) - ($discount)); 
    } 
    } 
    echo "<pre><b>Total " . $supertotal . " - 20% (discount for online renting) " . $discount . " = " . $grandtotal . ", your net amount.</b></pre>"; 
+1

효과가 아닌 원인을 수정해야합니다. 복제의 원인을 찾아 수정하십시오. –

+0

'unset ($ value)'의 목적은 무엇입니까? 나는 어쨌든 그 변수를 사용하는 것을 보지 못합니다. '$ value' 변수는'$ price' 배열에있는 실제 값의 복사본 일뿐입니다.'$ price' 배열에는 전혀 영향을 미치지 않습니다. 결론, unset ($ value)은 절대적으로 아무것도하지 않습니다. –

+0

그건 내 기본적인 질문이야? 설정이 의무적인지 여부는 알 수 없습니다. 명령의 유무에 관계없이 결과는 동일합니다. 마지막 행의 이중 계산. –

답변

0

먼저, 더 나은 당신은 완전히 각 실제 입력 변수를 제공해야합니다.

위의 코드조차도 적절한 방법은 아니지만 여전히 작동합니다. unset() 전화가 여기에 오지 않아도됩니다.

다음, 비트 리팩토링, 메인 루프에서 마지막 foreach 블록을 이동 : # 1

foreach ($price as $key => $value) { 
    //old logic 
} 

foreach ($total as $key2 => $value2) { 
    $supertotal += $total[$key2]; 
    $discount = (($supertotal) * 0.2); 
    $grandtotal = (($supertotal) - ($discount)); 
} 

다음, 당신도에 의해 # 1 foreach 루프에서 모든 계산을 제거 할 수 있습니다

$superTotal = array_sum($total); 
$discount = $superTotal * 0.2; 
$grandTotal = $superTotal - $discount; 

마지막으로, 모든 사용자가 지불 버튼을 누른 후 일이 깨지는 경우 대략 계산이 완전히 click on pay button 이후의 이벤트에 의존한다는 것을 의미합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 작동하지 않습니다. 그 결과는 마지막에 같은 더블 카운트가됩니다. –

+0

설정을 해제하는 방법을 묻는 것으로 생각했습니다. 그래서 나는 대답했다. 논리를 깨는 문제로 돌아갑니다. 코드에서 "마지막으로 임대 한 장비의 라인이 두 배가됩니다"라는 의미의 라인은 무엇입니까? – ThangTD

+0

위에 설명되어 있습니다. 예를 들어 1 : 스키를 20 대 임대하면 시스템은 총 20 대, 총 20 대를 생성합니다. 2/30 초 동안 스키를 임대하면 시스템은 총 30 총액 50. 3/이제 당신은 확인하고 지불하고 싶습니다. "Pay"를 클릭하면 30이라는 세 번째 줄이 생기고 총합은 80이됩니다. 그건 잘못된 것이고 왜 세 번째 줄이 만들어 졌는지 모르겠습니다. –