Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ช่วยอธิบายคำสั่งการทำงานของโค๊ดนี้ให้หน่อยครับ พอดีไม่เข้าใจการทำงานของมันครับ



 

ช่วยอธิบายคำสั่งการทำงานของโค๊ดนี้ให้หน่อยครับ พอดีไม่เข้าใจการทำงานของมันครับ

 



Topic : 110776



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์




ช่วยอธิบายคำสั่ง ใน 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







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-08-21 17:12:37 By : shield View : 777 Reply : 10
 

 

No. 1



โพสกระทู้ ( 2,311 )
บทความ ( 1 )



สถานะออฟไลน์


มันก็มี Comment ทุกส่วนแล้วนิครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 17:29:21 By : arm8957
 


 

No. 2



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

เอ่อ..เค้าก็คอมเม้นท์มาให้นิครับ ไม่น่างง ไม่งั้นก็ก็ลอง echo ใน loop ดูครับ รับรองหายงง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 20:00:50 By : mangkunzo
 

 

No. 3



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


อันนั้นผม คอมเม้นของผมเองครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 20:32:48 By : shield
 


 

No. 4



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ผมงงว่ามัน จะหาร ปัดเศษยังไง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 20:34:45 By : shield
 


 

No. 5



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

Code (PHP)
$num = floor($remainder/$type);

//floor()  เป็น function ของ php เอาไว้หารแบบตัดเศษทิ้งครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 20:58:18 By : mangkunzo
 


 

No. 6



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ใช่ครับผม เข้าใจครับว่ามันจะหารปัดเศษทิ้งครับ
ตรง $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
 


 

No. 7



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

echo ใน loop ดู เอาออกมาดูทุกตัวเลยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-21 21:43:47 By : mangkunzo
 


 

No. 8



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ผม 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
 


 

No. 9



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


มีท่านไหนเก่งช่วยอธิบาย กระบวนการของขั้นตอนนี้ได้บ้างครับ

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
 


 

No. 10



โพสกระทู้ ( 484 )
บทความ ( 3 )



สถานะออฟไลน์


มา มา ไล่ทีละบรรทัดกัน

$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
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยอธิบายคำสั่งการทำงานของโค๊ดนี้ให้หน่อยครับ พอดีไม่เข้าใจการทำงานของมันครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่