การสร้างตัวแปรในภาษา PHP ไม่จำเป็นต้องบอกชนิดของตัวแปรนั้นๆ เพียงแค่กำหนดค่าให้ตัวแปร ตัวแปรนั้นๆ ก็จะถูกประกาศ (cast) ให้เป็นชนิดตามข้อมูลที่ได้กำหนดเข้าไป (งง ไหมเนี่ย)

ภาษา PHP พัฒนามาจากภาษา C จึงมีชนิดข้อมูลที่คล้ายกัน แต่ได้ตัดชนิดข้อมูลที่ซ้ำซ้อนกันออกไป จนเหลือชนิดข้อมูล 3 ชนิดใหญ่ 7 ชนิดย่อย ดังนี้

ชนิดข้อมูลกลุ่มแรก สามารถเก็บได้เพียงข้อมูลเดียว (Scalar Datatypes)
เป็นชนิดข้อมูลที่เก็บค่าไว้ได้เพียงชนิดเดียว มีทั้งหมด 4 ชนิดคือ

Boolean เก็บข้อมูลเพียง 2 ค่าคือ true กับ false เท่านั้น ใช้ในคำสั่งเปรียบเทียบ เพื่อเลือกเส้นทางการทำงานของโปรแกรม และตัวแปรทุกๆ ตัว ถือว่าเป็นตัวแปรชนิด Boolean ด้วยเหมือนกัน ถ้าหากนำไปใช้ในคำสั่งเปรียบเทียบ จะได้ค่าที่เป็น true กลับมาทั้งหมด ยกเว้นตัวแปรที่เก็บค่า 0 เท่านั้น จะได้ค่าเป็น false

 <?php
	$foo = true;	// จริง
	$foo = false;	// เท็จ
	$foo = 1;	// จริง
	$foo = -1;	// จริง
	$foo = "hello";	// จริง
	$foo = 0;	// เท็จ

	// เพื่อนๆ ว่าโค๊ดข้างล่างนี่ จะรันได้หรือไม่ และผลลัพธ์จะเป็นยังไงครับ?
	$foo = "hello";
	if ($foo) {
		echo "TRUE";
	}
	else {
		echo "FALSE";
	}
?> 

Integer หรือ จำนวนเต็ม ถ้าหากกำหนดข้อมูลที่มีเลขทศนิยม ตัวแปรนั้นๆ จะถูกประกาศให้เป็น Float โดยอัตโนมัติ ตัวแปรชนิดจำนวนเต็มสามารถเก็บข้อมูลได้ทั้งบวกและลบตามเลขฐาน 3 ชนิดคือ

  1. ฐานสิบ (Decimal) กำหนดตัวเลขเข้าไปตรงๆ เลย เป็นเลขฐานที่คนคุ้นเคยมากที่สุด
  2. ฐานแปด (Octal) เติมเลข 0 เข้าไปข้างหน้าตัวเลขชุดนั้นก่อน
  3. ฐานสิบหก (Hexadecimal) เติม 0x เข้าไปข้างหน้าตัวเลขชุดนั้น
<?php
	42	// decimal
	-234034	// decimal
	0436	// octal
	0x7ABF	// hexadecimal
	123e10	// decimal
?> 
แล้วถ้าเราใส่เลข 8 และ 9 ในตัวเลขที่เป็นฐานแปด เช่น 0899 ผลลัพธ์ที่ได้จะเป็นอะไร?

*** ค่า Integer ในภาษา PHP จะเก็บค่าได้สูงสุดตั้งแต่ -231 ถึง 231 ***

Float หรือจำนวนจริง (หนังสือบางเล่มจะเขียนว่า Double) ตัวเลขทุกตัวที่มีทศนิยมไม่ว่าจะเป็นบวกหรือลบจะถือว่าเป็นจำนวนจริงทั้งหมด

 <?php
	// ทุกตัวเป็น Float
	1.23456
	4.00
	11.3e4
	11.22e+20
?> 

String เป็น ข้อความ หรือ ตัวอักษร ในภาษา PHP ไม่มีตัวแปรแบบ char เพราะฉะนั้น ข้อความทุกข้อความ จะถือว่าเป็น string ทั้งหมด ตัวแปร string จะถูกกำหนดอยู่ภายใน ‘ (single quote) หรือ ” (double quote) ก็ได้

 <?php
	// ทุกตัวเป็น string หมด
	"hello world"
	'cmdevhub\n'
	"123&%$abc^"
?> 

นอกจากนี้เรายังสามารถเข้าถึงตัวอักษรภายใน string ได้โดยมองตัวแปร string นั้นเป็น array ตัวหนึ่ง และเข้าถึงข้อมูลภายในโดยการอ้างตัวแปรแบบ array

 <?php
	$str = "www.cmdevhub.com";
	echo $str[0];	// ได้ตัว w
	echo $str[6];	// ได้ตัว d
?> 

ชนิดข้อมูลกลุ่มที่สอง เก็บข้อมูลได้หลายๆ แบบในตัวเดียวกัน (Compound Datatypes)
เป็นตัวแปรที่เก็บข้อมูลได้หลายๆ ค่าในตัวแปรตัวเดียวมี 2 ชนิดคือ

Array (อาเรย์) เป็นชุดข้อมูลที่มีค่าหลายๆ ค่า ในตัวเดียว โดยไม่จำเป็นต้องเป็นข้อมูลชนิดเดียวกัน หมายความว่าเราสามารถเก็บข้อมูล Integer, Float, String ไว้ในตัวแปรตัวเดียวกันได้ โดยใช้เครื่องหมาย […] และมี key เป็นตัวแยกชุดข้อมูลนั้นๆ

ตัวแปรอาเรย์ใน PHP จะแบ่งเป็น 2 ชนิดใหญ่ๆ คือ อาเรย์ธรรมดา และ อาเรย์แบบจับคู่ (Associative Array)

อาเรย์ธรรมดา ก็คืออาเรย์แบบทั่วๆ ไปนี่แหละครับ จะอ้างอิงโดยใช้ key เป็นหมายเลขตาม index ตัวแปรอาเรย์เริ่มจากเลข 0 ไปจนหมดข้อมูลอาเรย์ ตัวอย่างการสร้างอาเรย์

 <?php
	$a = array();	// ประกาศตัวแปรว่าเป็น อาเรย์
	$a[0] = "PHP";
	$a[1] = "ASP";
	$a[2] = "JSP";
	$a[3] = "Python";
	$a[4] = "Ruby";

	// เราสามารถเข้าถึงอาเรย์ได้โดยใช้หมายเลข index เป็นตัวอ้างอิง

	echo $a[0];	// ผลลัพธ์ PHP
	echo $a[4];	// ผลลัพธ์ Ruby
?> 

ใน PHP เราสามารถกำหนดค่าในอาเรย์โดยไม่ต้องกำหนด index ก็ได้ เช่น

 <?php
	$a = array();	// ประกาศตัวแปรอาเรย์
	$a[] = "PHP";
	$a[] = "ASP";
	$a[] = "JSP";

	// ตัวแปร $a จะเก็บค่าโดยเริ่มจากหมายเลข index 0 เป็นต้นไป และสร้างหมายเลข index ขึ้นมาโดยอัตโนมัติ

	echo $a[2];	// ผลลัพธ์ JSP
?> 

อาเรย์แบบจับคู่ หรือ Associative Array ตามปกติ key ที่ใช้อ้างอิงอาเรย์จะเป็นตัวเลข 0 ไปจนถึงตัวสุดท้ายของอาเรย์ แต่เราสามารถใช้ข้อความมาเป็น key เพื่ออ้างอิงค่าในอาเรย์นั้นๆ ได้ ลองดูตัวอย่างเลยครับ

 <?php
	$capital = array();
	$capital["thailand"] = "bangkok";
	$capital["japan"] = "tokyo";
	$capital["uk"] = "london";
	$capital["usa"] = "washington";

	// เราสามารถอ้างถึงข้อมูลในอาเรย์ได้โดยใช้ชื่อประเทศเลย

	echo $capital["thailand"];	// ไ้ด้ bangkok
	echo $capital["japan"];	// ได้ tokyo
?> 

แล้วถ้าอ้างอิงโดยใช้ัคำว่า Thailand แทนคำว่า thailand ล่ะ? ก็จะเจอคำเตือนว่า ไม่พบ index นี้

Notice:  Undefined index:  Thailand in C:\www\cmdevhub\array.php on line 10

เพราะฉะนั้น การอ้างอิงอาเรย์แบบจับคู่ ตัวอักษรเล็กหรือใหญ่ ถือว่าเป็นคนละตัว เหมือนกับการอ้างอิงตัวแปรนะครับ ระวังไว้ด้วย

ข้อมูลอาเรย์ ยังสามารถกำหนดให้เป็นอาเรย์ซ้ำเข้าไปอีกได้ เป็นหลายๆ ชั้น (เรียกว่า มิติ (dimension)) แต่ที่ใช้กันมากที่สุดก็คงไม่พ้นอาเรย์ 1 มิติ นี่แหละครับ ส่วนอาเรย์ 2 มิติก็มีใช้กันบ้าง แต่ 3 มิตินี่ ตั้งแต่เขียนโปรแกรมมา ไม่เคยมีงานไหนที่ใช้เลย นอกจากงานทำส่งอาจารย์เท่านั้น

การสร้างอาเรย์ 2 มิติ จากตัวอย่างข้างต้น เป็นการสร้างอาเรย์ 1 มิติ หลักการในการสร้างอาเรย์ 2 มิติก็เหมือนกับอาเรย์ 1 มิติ 2 ตัวมาต่อกัน เท่านั้นเองครับ ไม่ยากเลย ลองดูจากตัวอย่างล่ะกันครับ

 <?php
	$a = array();
	$a[0][] = "white";
	$a[0][] = "black";
	$a[0][] = "blue";

	$a[1][] = "banana";
	$a[1][] = "apple";

	// การอ้างอิงข้อมูลในอาเรย์

	echo $a[0][1];	// ได้ผลลัพธ์ black
	echo $a[1][1];	// ได้ผลลัพธ์ apple
?> 

เราสามารถผสมตัวแปรอาเรย์แบบจับคู่เข้ากับอาเรย์ธรรมดา หรืออาเรย์แบบจับคู่เข้ากับอาเรย์แบบจับคู่ก็ได้เช่นกัน เช่น

 <?php
	$country = array();
	$country["thailand"]["north"][] = "chiang mai";
	$country["thailand"]["north"][] = "chiang rai";
	$country["thailand"]["north"][] = "lamphun";

	$country["thailand"]["central"][] = "bangkok";
	$country["thailand"]["central"][] = "samut songkharm";

  	// ถ้าต้องการแสดงจังหวัดในตัวแปร $country ต้องอ้างอิงดังนี้

 	echo $country["thailand"]["north"][0];	// ได้ผลลัพธ์ chiang mai
	echo $country["thailand"]["central"][0];	// ได้ผลลัพธ์ bangkok
?> 

เห็นไหมครับ ตัวแปรอาเรย์นั้น ไม่ยากเลย พยายามนึกภาพใหม่เหมือน “กล่อง” ที่วางเรียงต่อๆ กัน แล้วแต่ละกล่องก็มีชื่อเดียวกัน แต่มีลำดับที่ต่างกัน ถ้าเราต้องการนำของไปใส่ในกล่องไหน ก็อ้างอิงหมายเลขกล่องนั้น เพียงแต่เริ่มนับจากกล่องที่ 0 นะครับ

==== ยังขาด Object กับ Spcial datatype เดี๋ยวมาเขียนต่อ ====

Comments

จำนวนความเห็น