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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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 เข้าไปข้างหน้าตัวเลขชุดนั้น
1
2
3
4
5
6
7
<?php
    42  // decimal
    -234034 // decimal
    0436    // octal
    0x7ABF  // hexadecimal
    123e10  // decimal
?>
แล้วถ้าเราใส่เลข 8 และ 9 ในตัวเลขที่เป็นฐานแปด เช่น 0899 ผลลัพธ์ที่ได้จะเป็นอะไร?

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

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

1
2
3
4
5
6
7
<?php
    // ทุกตัวเป็น Float
    1.23456
    4.00
    11.3e4
    11.22e+20
?>

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

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

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

1
2
3
4
5
<?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 ไปจนหมดข้อมูลอาเรย์ ตัวอย่างการสร้างอาเรย์

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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 ก็ได้ เช่น

1
2
3
4
5
6
7
8
9
10
<?php
    $a = array();   // ประกาศตัวแปรอาเรย์
    $a[] = "PHP";
    $a[] = "ASP";
    $a[] = "JSP";
 
    // ตัวแปร $a จะเก็บค่าโดยเริ่มจากหมายเลข index 0 เป็นต้นไป และสร้างหมายเลข index ขึ้นมาโดยอัตโนมัติ
 
    echo $a[2]; // ผลลัพธ์ JSP
?>

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

1
2
3
4
5
6
7
8
9
10
11
12
<?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 ตัวมาต่อกัน เท่านั้นเองครับ ไม่ยากเลย ลองดูจากตัวอย่างล่ะกันครับ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
?>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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

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