ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingทำไม A กับ 0 ถึงมีค่าเท่ากัน
หน้า: [1] 2  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ทำไม A กับ 0 ถึงมีค่าเท่ากัน  (อ่าน 1952 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« เมื่อ: 29 ธันวาคม 2009, 18:19:07 »

โค๊ด:
	
$a = "A";
$b = 0;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}

ไม่ทราบเป็นที่เครื่องผมคนเดียวหรือเปล่า ใครว่างลองเอาสคิปนี้ไปรันดู ทำไมของผมมันออกมาว่า A กับ 0 มีค่าเท่ากัน
บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 29 ธันวาคม 2009, 18:37:59 »

มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม)

ใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false)
ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false)

ผิดพลาดอย่างไรขออภัย Embarrassed
« แก้ไขครั้งสุดท้าย: 29 ธันวาคม 2009, 18:39:35 โดย Luscentz » บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
iampick
คนรักเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 119



ดูรายละเอียด
« ตอบ #2 เมื่อ: 29 ธันวาคม 2009, 18:39:21 »

ขอคุณสำหรับความรู้คับผม
บันทึกการเข้า

Next Target : ........
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« ตอบ #3 เมื่อ: 29 ธันวาคม 2009, 18:47:47 »

ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน

แล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int
บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 29 ธันวาคม 2009, 19:08:00 »

ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน

แล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int
มันอาจจะ ปัดตัวแปรมาเช็คครับ (ผมเดานะครับ) เช่น

ตัวแปรคนละชนิด แต่ค่ามันอาจจะเท่ากันได้ไงครับเช่นเลข 1,0 true, false
แล้วเราจะวัดค่าได้ยังไง โดยที่เราไม่รู้ว่าเป็น string หรือ int

ยังไงเราก็ต้องรู้ 1 ตัวละครับ ว่าเราจะเช็คอะไร ? เราก็ปัดตัวแปรทั้งสองก่อนเช็คให้เป็นชนิดนั้นๆ ไงครับ
อาจจะใช้ (string) หรือ (int) นำหน้าเพื่อปัดเป็นชนิดนั้นๆ แล้วค่อยควบคุมก็ได้เช่นกัน
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
kurng
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 96
ออฟไลน์ ออฟไลน์

กระทู้: 950



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 29 ธันวาคม 2009, 19:12:15 »

มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม)

ใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false)
ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false)

ผิดพลาดอย่างไรขออภัย Embarrassed
คล้าย ๆ ข้อความข้างบนครับ

ผมเปิดหนังสือตอบ นะ
ได้ความว่า
 ตัวแปร ทั้งสองตัว  มันเป็นตัวแปรคนละชนิดกัน   เมื่อนำมาเปรียบเทียบด้วย == จึงมีค่า เป็น true เนื่องจากไม่มีการเปรียบเทียบค่า

ในที่นี้ ไม่ได้แปรว่า A=0 ตามที่ตั้งค่าให้มันแสดง   แต่แปรว่า ค่าที่ได้ เป็น true จึง แสดง

เปิดหนังสือตอบ   ขอบคุณครับที่ให้ได้ทบทวน
บันทึกการเข้า

IN Times  : หลังจากโดนคนรักทิ้ง จึงเข้าป่า เจอฤษี สอนวิชาเปิดฟ้า วันนี้เขากลับมาอย่างผู้ชนะ กับรายได้ ไม่ต่ำกว่า 20,000 บาท ต่อเดือน  ซึ่งก็ไม่รู้ว่าจะยังดีอย่างนี้ไปอีกนานแค่ไหน แต่ตอนนี้ขอดื่มด่ำกับความสำเร็จในตอนนี้ก่อน เรื่องราวต่อไปจะเป็นเช่นไร ไม่มีใครรู้ เพราะไม่มีให้ติดตาม ในฟรีทีวีทั่วไป หากอยากรู้ท่านต้องซื้อ กล่อง Google TV เท่านั้นถึงจะรับสัญญาณนี้ได้ ฮา ๆ

ฺB4A coupon code ลด 50%: cgulwd ---หารายได้จาก app ที่ Startapp คลิ๊กเลย
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« ตอบ #6 เมื่อ: 29 ธันวาคม 2009, 19:25:42 »

ปกติ php มันเทียบค่าต่างชนิดได้ไม่ใช่เหรอครับ

คือถ้ามันจะไม่ได้ทั้งหมดก็ไม่ว่าอะไรแต่

แล้วทำไม  A กับ 1 มีค่าไม่เท่ากัน

โค๊ด:
	$a = "A";
$b = 1;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}

คือถ้าใช้ เงื่อนไขว่า "ค่าคนละชนิดจะไม่เทียบค่า และจะออกมาเป็น true" แล้วทำไมทีงี้มันออกมา มีค่าไม่เท่ากันอ่ะครับ




บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 29 ธันวาคม 2009, 19:39:26 »

คือ มันก็เหมือนกันแหละครับ

เดาอีกเหมือนเดิม ถ้าให้ 1 - true, 0 - false

ผมเคยบอกไปว่า ถ้าเป็นสตริง แล้วเราเช็คแบบข้ามชนิดยังงี้ php มัน(น่าจะ) เช็คโดยคิดว่าตัวแปรทั้งสองของเราเป็นบูลีน
มันก็เลยสรุปมาว่า สตริง -> เป็น false ไปซะ อะไรประมาณนี้

หรือจะคิดว่า string มันแปลงมาเป็นเลขแล้วได้ 0 ก็ได้


มันอยู่ที่ใจเราอ่ะครับ เราอยากจะเข้าใจแบบไหน
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
kurng
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 96
ออฟไลน์ ออฟไลน์

กระทู้: 950



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 29 ธันวาคม 2009, 19:42:01 »

หากจำไม่ผิด  0 กับ 1 เอง มันมีค่า ทางตรรกะ หมายถึงตัวมันเอง มีค่า เวลาเปลี่ยเทียบ หมายถึง  ใช่ กับ ไม่ใช่อยู่แล้ว

ลองเปลี่ยน  ค่า $b เป็น 2 ดูซิครับ ว่ามันให้ค่าอะไร  หากมันออกมาเท่ากัน

อาจแปลว่า

"A"= 0 ในคำถามแรก  หมายถึง จริงกับจริง  มันเลยให้ค่าออกมาเป็นจริง
"A"=1 ในคำถามที่ 2 หมายถึง  จริง กับ เท็จ  มันเลยออกมา เป็นเท็จ

อาจหมายถึงอย่างนี้ก็ได้ ในเมื่อมันอ่านค่าตัวเลข กับตัวอักษรไม่ได้เลยอ่านค่า เป็นการเปรียบเทียบ

มั่ง
บันทึกการเข้า

IN Times  : หลังจากโดนคนรักทิ้ง จึงเข้าป่า เจอฤษี สอนวิชาเปิดฟ้า วันนี้เขากลับมาอย่างผู้ชนะ กับรายได้ ไม่ต่ำกว่า 20,000 บาท ต่อเดือน  ซึ่งก็ไม่รู้ว่าจะยังดีอย่างนี้ไปอีกนานแค่ไหน แต่ตอนนี้ขอดื่มด่ำกับความสำเร็จในตอนนี้ก่อน เรื่องราวต่อไปจะเป็นเช่นไร ไม่มีใครรู้ เพราะไม่มีให้ติดตาม ในฟรีทีวีทั่วไป หากอยากรู้ท่านต้องซื้อ กล่อง Google TV เท่านั้นถึงจะรับสัญญาณนี้ได้ ฮา ๆ

ฺB4A coupon code ลด 50%: cgulwd ---หารายได้จาก app ที่ Startapp คลิ๊กเลย
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« ตอบ #9 เมื่อ: 29 ธันวาคม 2009, 20:03:05 »

อย่างที่บอกไปว่า ถ้ามันเป็นการเทียบค่า และใช้ตรรกะเดียวกันทั้งหมดก็ไม่แปลก แต่ดูแล้วมันน่าไม่ใช่อ่ะครับ

ถ้าให้ค่า $b = 2 ก็ต้องออกมาไม่เท่ากันจิ คือจะให้ค่าอะไรก็ตามถ้าเป็นค่าที่ไม่เท่ากัน มันก็จะไม่ผ่าน if ยกเว้นว่าเป็น 0
และคำถามของกระทู้ก็คือทำไมเมื่อเป็น 0 ถึงผ่าน if


ถ้ามองในแง่ของการที่มันไม่ได้เทียบค่าของ 2 ตัว แต่เทียบว่า "2 ตัวเป็น true หรือเป็น false เหมือนกันหรือเปล่า" มันก็ยังไม่ใช่อยู่ดี เพราะ

โดยปกติ 0 จะเท่ากับ false เช่น

$x =0;
if($x){echo "x มีค่า";} else {echo "x ไม่มีค่า";}

ถ้าวัดแบบนี้ ผลจะออกมาเป็น x ไม่มีค่า (เป็น false ไม่สามารถผ่าน if ได้)

$x ="A";
if($x){echo "x มีค่า";} else {echo "x ไม่มีค่า";}

ถ้าแบบนี้ มันจะมีค่า (เป็น true จึงสามารถผ่าน if ได้)

ในเมื่อ x ตัวแรกเป็น false และ x ตัวที่ 2 เป็น true เวลามาเทียบกัน มันก็ต้องไม่ผ่าน if สิ แล้วทำไมมันถึงผ่าน


หรือถ้ามองว่า ตัว php มองว่า 0 มีค่าเป็น true ดังนั้น 1 ก็ควรมีค่าเป็น false
และเมื่อ  $a ="A"; มีค่าเป็น true $a ="1"; ก็ควรมีค่าเป็น true ด้วย

แล้วทำไม $a = "1" กับ $b = 1 ถึงผ่าน if ได้ ในเมื่อ ตัวนึงเป็น true อีกตัวเป็น false

บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 29 ธันวาคม 2009, 20:21:02 »

ถ้างั้นผมก็คงอธิบายไม่ได้แล้วอะนะ (คงต้องไปถามผู้พัฒนา php ในตอนนี้เอง wanwan004)

"1" กับ 1 เช็คกันได้อาจจะเป็นเพราะว่า php มันฉลาดก็ได้ รู้ว่าตัวแปรสองตัวเป็นเลขเหมือนกัน เพราะผมลอง
"3" กับ 3 - ผ่าน
"4" กับ 3 - ไม่ผ่าน
"34" กับ 3 - ผ่าน
"43" กับ 3 - ไม่ผ่าน
หรือมันอาจจะเช็คค่าที่ char ตัวแรก (รึเปล่า ?)

ก็นั่นแหละ สุดท้ายเราก็ไม่รู้ว่าสุดท้ายแล้วมันใช้ตัวแปรชนิดไหนในการเทียบค่า มันอาจจะใช้ทั้งหมด แต่อาจจะไล่กันมาเรื่อยๆ ก็ได้
เพราะว่า php, perl มีข้อพิเศษตรงที่ตัวแปรมันยืดหยุ่นแบบเว่อร์ๆ นี้แหละ
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« ตอบ #11 เมื่อ: 29 ธันวาคม 2009, 20:30:55 »

เอ.. ทำไมของผม "34" กับ 3 มันไม่ผ่านอะไครับ
หรือเป็นที่เครื่องผมคนเดียวหว่า โดนไวรัสเปล่าเนี่ย  wanwan009

ช่วยทดลองดูอีกทีได้หรือเปล่าครับ อยากรุ้ว่าเป็นที่เครื่องหรือเป็นที่อะไร ทำไมมันไม่เหมือนกัน wanwan011

โค๊ด:
	$a = "34";
$b = 3;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}
บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 29 ธันวาคม 2009, 20:34:44 »

เวน สงสัยผมเมา Shocked

ลองดูอีกรอบไม่ผ่านแหะ
ผมคงเมาเองแหละ ผมใช้
echo '$a eq $b ';
กับ
echo '$a ne $b';
มึนเอง -.-'




(อายจัง) Embarrassed



(หนีดีกว่า!)













อย่าตามมาน้าาาา wanwan006
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
fatman
Newbie
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 43



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 29 ธันวาคม 2009, 21:12:12 »

อ่านจากคู่มือมาครับ

http://php.net/manual/en/language.operators.comparison.php

If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers. These rules also apply to the switch statement.

 - ถ้าเปรียบเทียบค่า ตัวเลขกับตัวหนังสือ ค่าที่เป็นตัวหนังสือจะถูกแปลงเป็นตัวเลขก่อนครับ

ซึ่งวิธีแปลงจากตัวหนังสือเป็นตัวเลข อ้างจาก

http://www.php.net/manual/en/l...nguage.types.string.conversion

If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

 -ถ้าตัวหนังสือขึ้นต้นด้วยตัวเลข ค่านี้จะถูกนำมาแปลงเป้นตัวเลข แต่ถ้าเป็นตัวหนังสือที่ไม่ใช่ตัวเลขจะแปลงเป็น 0 ทั้งหมด

นั่นก็คือ $a จะถูกแปลง เป็น 0  ทำให้ 0 == 0 เป็นจริงครับ   wanwan007 wanwan007
บันทึกการเข้า

เล่นเกมส์ถามตอบปัญหา แบบทดสอบ ได้ที่
http://www.funquizgame.com

สร้าง "บัญชีรายรับรายจ่าย" ได้แล้ววันนี้ที่
http://www.rubjai.com
tamiyalagu
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 191



ดูรายละเอียด
« ตอบ #14 เมื่อ: 29 ธันวาคม 2009, 21:35:49 »

อ่าา ที่แท้มันเป็นเช่นนี้เอง

ปริศนาไขกระจ่างแล้ว

ขอบคุณมากครับ 
บันทึกการเข้า
KMCORP
ก๊วนเสียว
*

พลังน้ำใจ: 52
ออฟไลน์ ออฟไลน์

กระทู้: 315



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 29 ธันวาคม 2009, 22:19:20 »

อ่านจากคู่มือมาครับ

http://php.net/manual/en/language.operators.comparison.php

If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers. These rules also apply to the switch statement.

 - ถ้าเปรียบเทียบค่า ตัวเลขกับตัวหนังสือ ค่าที่เป็นตัวหนังสือจะถูกแปลงเป็นตัวเลขก่อนครับ

ซึ่งวิธีแปลงจากตัวหนังสือเป็นตัวเลข อ้างจาก

http://www.php.net/manual/en/l...nguage.types.string.conversion

If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

 -ถ้าตัวหนังสือขึ้นต้นด้วยตัวเลข ค่านี้จะถูกนำมาแปลงเป้นตัวเลข แต่ถ้าเป็นตัวหนังสือที่ไม่ใช่ตัวเลขจะแปลงเป็น 0 ทั้งหมด

นั่นก็คือ $a จะถูกแปลง เป็น 0  ทำให้ 0 == 0 เป็นจริงครับ   wanwan007 wanwan007


+1

ขอบคุณครับ ผมเองก็สงสัยเหมือนกัน
บันทึกการเข้า


โปรโมทเว็บให้ POP กับ WP Digg Dofollow 100% เพิ่ม Traffic X2 ด้วยTwitter Connect รับทั้ง ไทย+Eng
useful blog
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 30 ธันวาคม 2009, 03:35:38 »

+1 เช่นกัน


ผมก็โชว์เห่ยอยู่นานเลย wanwan004
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
JeffyPluS
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 236
ออฟไลน์ ออฟไลน์

กระทู้: 3,135



ดูรายละเอียด เว็บไซต์
« ตอบ #17 เมื่อ: 30 ธันวาคม 2009, 03:58:36 »

ค่า Default ของ "A" น่าจะให้ค่าไว้ที่ 0 ซึ่งอาจจะเป็นเรื่องของตรรกะ คือ true / false
บันทึกการเข้า


เว็บโฮสติ้ง แรง เร็ว เสถียร พร้อมดูแลทุกท่านคุณภาพการบริการเริ่มต้นเพียง 500.-/ปี
█ Tel 0810066690 | EVO VPS | EVO Hosting
VPS Hosting ประสิทธิภาพสูง แรง เร็ว เสถียร
LineOA : @hosting
Rapid-Developer
Newbie
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 50



ดูรายละเอียด เว็บไซต์
« ตอบ #18 เมื่อ: 30 ธันวาคม 2009, 09:03:20 »

ถ้าจะเปรียบเทียบว่า อะไรมันคือสิ่งๆนั้นจริงๆหรือเปล่า เช่นมันใช่ true false จริงหรือเปล่า จะใช้แบบนี้ครับ

โค๊ด:
$a = "A";
$b  = 0;

if( $a === $b ) { echo  "true"; } else { echo "false"; }


หรือจะใช้ในการเช็ค type ของแต่ละชนิดได้ด้วยว่ามันใช่ type นั้นจริงๆหรือเปล่า เช่น ตังแปรนั้นเป็น array เหมือนกันหรือเปล่า
บันทึกการเข้า

--
powerbeer001
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 28
ออฟไลน์ ออฟไลน์

กระทู้: 888



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 30 ธันวาคม 2009, 09:17:10 »



ผมคิดว่ามันเป็นเพราะว่า มันแปลง A เป็น 0 เพราะต้องไปเทียบ type กับ $b ซึ่งเป็น Integer

if(String==Integer) ดังนั้นมันก็เปรียบได้กับ if(Integer==Integer) ซึ่งในที่นี้ $a="A" ดังนั้นเมื่อ $a โดนแปลงเป็น Integer ก็มีค่าเท่ากับ 0 นั่นเอง
ทำให้มันตรงกัน

ลองแก้ code เป็น

$a = "A";
$b  = "0";  // ใส่ " เพื่อให้เป็น String

if( $a == $b ) { echo  "true"; } else { echo "false"; }

รับรองไม่เท่ากันแน่นอนครับครับ

 Tongue
บันทึกการเข้า

หน้า: [1] 2  ทั้งหมด   ขึ้นบน
พิมพ์