|
|
|
ช่วยอธิบายคำสั่งการทำงานของโค๊ดนี้ให้หน่อยครับ พอดีไม่เข้าใจการทำงานของมันครับ |
|
|
|
|
|
|
|
ช่วยอธิบายคำสั่ง ใน foreach ให้หน่อยครับ ผมไม่เข้าใจ สองบรรทรรทัดนี้ครับ
Code (PHP)
$num = floor($remainder/$type);
$remainder -= $num * $type;
function change($change){ //
$money_type = array(1000,500,100,50,20,10,5,2,1,0.50,0.25); //เก็บชนิดธนบัตร
$change_type = array(); //เก็บชนิดของธนบัตรที่ต้องใช้ทอน
$change_num = array();// เก็บจำนวนธรบัตรที่ต้องใช้ทอน
$remainder = $change; // ให้ $remaunder = $change ที่รับค่าเข้ามา คือ 890.25
foreach($money_type as $type){
$num = floor($remainder/$type);
$remainder -= $num * $type;
// เก็บเฉพาพชนิดธนบัตรที่ใช้ทอนเท่านั้น
if($num > 0){
array_push($change_type,$type);
array_push($change_num,$num);
}
}
$ch = array_combine($change_type, $change_num); // รวม 2 อาเรย์เข้าด้วยกัน คือ ประเภทเงิน กับ จำนวนของประเภทเงิน
return $ch;
}
//-----------------------------------------------------------
$price = 120.50; //กำหนดราคา
$pay = 1000; //กำหนดจำนวนเงิที่จ่าย
echo "ราคารวม: $price <br>";
echo "จ่าย: $pay <br>";
if($pay < $price){
echo "จ่ายเงินไม่พอ";
}
else if($pay == $price){
echo "เงินพอดีไม่ต้องทอน";
}
else{
$change = $pay - $price;
$result = change($change);
echo "เงินทอน: ".($pay - $price)."<br>";
echo "เงินทอน: ".$change."<br>";
while(list($type,$num)= each($result)){
echo "bath".$type."=>".$num."<br>";
}
}
?>
Tag : PHP, MySQL
|
|
|
|
|
|
Date :
2014-08-21 17:12:37 |
By :
shield |
View :
824 |
Reply :
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันก็มี Comment ทุกส่วนแล้วนิครับ
|
|
|
|
|
Date :
2014-08-21 17:29:21 |
By :
arm8957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอ่อ..เค้าก็คอมเม้นท์มาให้นิครับ ไม่น่างง ไม่งั้นก็ก็ลอง echo ใน loop ดูครับ รับรองหายงง
|
|
|
|
|
Date :
2014-08-21 20:00:50 |
By :
mangkunzo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนั้นผม คอมเม้นของผมเองครับ
|
|
|
|
|
Date :
2014-08-21 20:32:48 |
By :
shield |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมงงว่ามัน จะหาร ปัดเศษยังไง
|
|
|
|
|
Date :
2014-08-21 20:34:45 |
By :
shield |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$num = floor($remainder/$type);
//floor() เป็น function ของ php เอาไว้หารแบบตัดเศษทิ้งครับ
|
|
|
|
|
Date :
2014-08-21 20:58:18 |
By :
mangkunzo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่ครับผม เข้าใจครับว่ามันจะหารปัดเศษทิ้งครับ
ตรง $num = floor($remainder/$type); ผมเข้าใจว่ามันจะ เอา 879.5 หาร 500 และก็ ลูปหารไปเรื่อยๆจนจบ
แต่ตรง $remainder -= $num * $type; นี่ผมไม่แน่ใจว่า $num * $type แทนค่าด้วยอะไร ครับ
แต่ผมเข้าใจว่ามันจะรับค่ามาอย่างนี้คือ
$remainder รับจาก $remainder = $change;
$num รับมาจาก $num = floor($remainder/$type); ถ้าอย่างนั้น ค่าแรกที่มันรับมาคือ 879/500 = 1.7 ปัดเศษเหลือ 1
$type = 500
อย่างนั้นแล้วค่าที่ได้จาก $remainder $num $type;
$remainder = 879.5
$num = 1
$type = 500
แล้วมันจะ $remainder จะลบ -= $num คูณ * $type; อย่างไร
แบบนี้หรือเปล่า
879.5 -= 1 = 878.5 หรือเปล่า *-*55
1*500 = 500 มั่วเอา คิดยังไงนี่ผมไม่เข้าใจจริงๆ แนะนำทีครับ
|
|
|
|
|
Date :
2014-08-21 21:37:43 |
By :
shield |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo ใน loop ดู เอาออกมาดูทุกตัวเลยครับ
|
|
|
|
|
Date :
2014-08-21 21:43:47 |
By :
mangkunzo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผม echo
echo $num;
echo "<br>";
echo $remainder;
echo "<br>";
ผล
0
879.5
1
379.5
3
79.5
1
29.5
1
9.5
0
9.5
1
4.5
2
0.5
0
0.5
1
0
0
0
แต่ก็ยังค่อยไม่เข้าใจว่า
$num = floor($remainder/$type); $num = 879.5/500 = 1.7 $num เก็บค่า 1 เอาไว้ แล้ว อย่างนั้น
$remainder -= $num * $type; ก็เท่ากับว่า 879.5 -= 1 * $type ซึ่งเป็น ค่า key แล้วผมไม่เข้าใจว่ามันจะออก ค่า 379.5 มายังไงครับ
|
|
|
|
|
Date :
2014-08-21 22:40:54 |
By :
shield |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีท่านไหนเก่งช่วยอธิบาย กระบวนการของขั้นตอนนี้ได้บ้างครับ
foreach($money_type as $type){
$num = floor($remainder/$type); // ($remainder/$type) คือ 879.5/500 = 1.7 ปัดลงเหลือ 1
$remainder -= $num * $type; // แต่บรรทัดนี้ มัน ลบ และคุณ ยังไงมีไงขอผู้รู้อธิบายหน่อยครับ เพราะ
echo ออกมาแล้วผลคือ
879.5
379.5
79.5
29.5
9.5
9.5
4.5
0.5
0.5
0
0
ถ้าเป็นการลบ แบบว่า 879.5 - 500 = 379.5 แบบนี้ยังพอเข้าใจ
แต่ทำไม $remainder ต้องลบเท่ากับ -= $num ซึ่งมีค่าเป็น 1 แล้ว * $type ออกค่ามาเป็น 379.5,79.5...... ได้อย่างไรครับ
|
|
|
|
|
Date :
2014-08-22 14:11:30 |
By :
shield |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มา มา ไล่ทีละบรรทัดกัน
$remainder = $change;//1000-120.5=879.5
$remainder=879.5;
foreach //Loop ไล่ไปตามนี้นะ 1000,500,100,50,20,10,5,2,1,0.50,0.25
//รอบที่1=1000, รอบที่2=500, รอบที่3=100 , ..., รอบที่11=0.25
#รอบที่ 1 (จำนวน 1000บาท)
$num = floor($remainder/$type);
// 879.5/1000=0.8795
// floor คือ หารไม่เอาเศา ก็คือ ข้างหน้าจุด ทศนิยม = 0
// $num=0;
$remainder -= $num * $type;// มีความหมายเท่ากับ
//$remainder=$remainder-($num * $type);
//แทนค่าเข้าไป $remainder=879.5-(0*1000)
Code (PHP)
if($num > 0) {
//array_push($change_type,$type);
//array_push($change_num,$num);
}
chk if ถ้า $num มากกว่า 0 ก็เพิ่มข้อมูลเข้าไปใน Array
รอบแรก ที่จำนวนเงิน 1000 ก็จึงไม่เพิ่ม เพราะ $num=0
หรือจะใช้
Code (PHP)
$change_type[]=$type;
$change_num[]=$num;
ก็จะช่วยในเรื่องของ Page Performance อิอิ
ต่อ
#รอบที่ 2 (จำนวน 500บาท)
$remainder=879.5 เท่าเดิม
$num = floor($remainder/$type);
//$num=floor(879.5/500) ย้ำ 500 คือ รอบที่2 หรือ $money_type[1] นะ
//=1.759 หารไม่เอาเศษ เท่ากับ 1 (ทศนิยมทิ้งไป)
$num=1;
$remainder -= $num * $type;//ในที่นี้ $remainder ยังมีค่าเท่าเดิมคือ 879.5
$remainder = 879.5-(1*500); // 1=$num และ 500 เท่ากับ วน loop array รอบที่ 2
$remainder = 379.5
chk if $num > 0 ก็เพิ่มค่าเข้าไปใน Array
#รอบที่ 3 (จำนวน 100บาท)
$remainder=379.5 แล้วนะ
$num = floor($remainder/$type);
//$num = floor(379.5/100); //ได้เท่ากับ 3.795 หารไม่เอาเศษได้เท่ากับ 3
$num=3;
$remainder -= $num * $type;
//$remainder = 379.5 - (3*100); 3=$num และ 100=array รอบที่3
$remainder = 79.5
chk if $num>0 ก็เพิ่มค่าเข้าไปใน array
ไล่แบบนี้จนครบ Loop
|
|
|
|
|
Date :
2014-08-23 11:50:55 |
By :
fossil31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|