PHP
เป็นภาษาตัวแปลสคริปต์ หมายความว่า language engine เรียกใช้สคริปต์ที่เขียนขึ้นโดยไม่มีขั้นตอนกลางในการคอมไพล์ หรือไปเป็นรูปแบบไบนารี
สคริปต์ส่วนใหญ่ที่ใช้สร้างโปรแกรมประยุกต์เว็บอยู่ในที่เดียวกับไฟล์ HTML ตามปกติไฟล์เก็บสคริปต์จะเก็บเป็นนามสกุล .php ถึงแม้ว่าบุคคลทั่วไปจะใช้นามสกุลเก่าคือ
.php3 และ .phtml พื้นที่เก็บไฟล์เหล่านี้จะขึ้นกับการตั้งค่าคอนฟิกให้แม่ข่ายเว็บส่งผ่านไฟล์เหล่านี้ไปยังตัวแปร
PHP พื้นที่จัดเก็บไฟล์หรือเอกสารนี้ได้รับอ้างถึงในฐานะ document
root
วันพฤหัสบดีที่ 27 พฤศจิกายน พ.ศ. 2557
ภาษา PHP
ต่อไปเป็นการทำความรู้จักภาษาเกี่ยวกับการแปลงประเภทข้อมูล ตัวแปรและการควบคุม
จากนั้นเรียนรู้เกี่ยวกับ operator และคำสั่งโครงสร้างควบคุมทางตรรกะของภาษาสำหรับการสร้างสคริปต์
ประเภทข้อมูล
การทำงานกับประเภทข้อมูลของ
PHP แตกต่างจากภาษาอื่นเล็กน้อย โดย PHP เป็นภาษา richly
typed ที่ตัวแปรไม่ต้องมีการประกาศเป็นประเภทข้อมูลเจาะจง เพราะ engine
กำหนดประเภทที่ใช้ตามกฎ บางครั้งเรียกสิ่งนี้ว่าประเภทข้อมูลไดนามิคส์
PHP
สนับสนุนประเภทข้อมูล
1. integer
2. float
หรือ double
3. string
4. boolean
5. array
6. object
Integer
integer
คือจำนวนเต็ม ตามปกติความแม่นยำขึ้นกับระบบปฏิบัติการ ส่วนใหญ่เป็นขนาด
32 บิต ใน PHP ไม่มี unsigned integer ดังนั้นค่ามากที่สุดของจำนวนเต็มคือ
2 พันล้าน เมื่อเกินจำนวนมากที่สุดของ integer ใน PHP
จะแปลงไปเป็น float แทนที่จะไปเป็นจำนวนเต็มลบเหมือนภาษาอื่น
<?php
$large
= 2147483647;
var_dump($large);
$large
= $large + 1;
var_dump($large);
?>
ผลลัพธ์
คือ
Int(2147483647) float(2147483648)
integer
ระบุในคำสั่งเป็นระบบเลขฐาน 8, ฐาน 10 หรือ ฐาน
16 ได้
การหารเลขจำนวนเต็มใน
PHP จะไม่ให้ผลลัพธ์เป็นจำนวนเต็ม เช่น นิพจน์
5
/ 2
PHP
มีผลลัพธ์คือ 2.5 ด้วยประเภทข้อมูล float แทนที่จะเป็นจำนวนเต็ม
2 เหมือนกับภาษาอื่น ถ้าต้องการค่าจำนวนเต็มจากการหาร ต้องมีการแปลงค่าเป็นจำนวนเต็ม
หรือใช้ฟังก์ชัน round
Float
float คือจำนวนทศนิยมหรือจำนวนจริง
มีขนาด 64 บิตด้วยความแม่นยำของทศนิยม 14 ตำแหน่ง PHP ไม่ได้แบ่งออกเป็น single และ double ตามความแม่นยำเหมือนกับภาษาอื่น
อย่างไรก็ตาม PHP ยอมรับคีย์เวิร์ด double เพิ่มเติมจาก float ที่มีความหมายตรงกัน <?php
$floatvar1 = 8.457;
|
|
$floatvar2 = 5.23e3;
|
// เหมือนกับ 5230.0
|
$floatvar3 = 7.2e+4;
|
// เหมือนกับ 72000.0
|
$floatvar4 = 1.234e-4;
|
// เหมือนกับ 0.0001234
|
$floatvar5 = 100000000000;
|
// ใหญ่เกินไปสำหรับ integer แปลงเป็น float
|
?> ข้อควรระวัง สำหรับ float ควรระวังความจำกัดด้านความแม่นยำ
การคำนวณที่ต้องการความแม่นยำสูงอาจจะมีปัญหาได้ แต่การประยุกต์ทั่วไปควรจะเพียงพอ
String
string เป็นชุดของตัวอักษร
ใน PHP ตัวอักษรมีค่า 8 บิต
ค่า string ระบุได้ 3 วิธี
ค่า string ระบุได้ 3 วิธี
Single Quoted
ข้อความ single
quoted เป็นชุดตัวอักษรที่เริ่มต้นและปิดท้ายด้วย single
quote(‘)
echo 'ข้อความ single quote';
echo 'ข้อความ single quote';
ในการรวม single
quote ภายในข้อความให้วาง backslash (\) ด้านหน้า
ที่เรียกว่าตัวอักษร escape
echo 'การแสดง single quote \' ';
echo 'การแสดง single quote \' ';
Double Quoted
ข้อความ double quoted คล้ายกับข้อความ single quoted ยกเว้น ตัวประมวลผลภาษา PHP ตัดสิ่งเหล่านี้เพื่อค้นหาและแทนที่
ชุดตัวอักษร escape และตัวแปร
นอกจากนี้ตัวอักษร escape \" ต้องการแทรก double quote ภายในข้อความ double quoted ต่อไปเป็นชุด escape ที่ PHP รู้จัก
นอกจากนี้ตัวอักษร escape \" ต้องการแทรก double quote ภายในข้อความ double quoted ต่อไปเป็นชุด escape ที่ PHP รู้จัก
ตาราง 1.2.1 escape
Escape
|
ผลลัพธ์
|
\n
|
ตัวอักษรขึ้นบรรทัดใหม่ (char(10) หรือ
0x0a/10 ใน ASCII)
|
\r
|
ตัวอักษร Carriage return (char(13) หรือ 0x0a/13
ใน ASCII)
|
\t
|
ตัวอักษรแท็บ
|
\\
|
ตัวอักษร backslash
|
\$
|
ตัวอักษรดอลลาร์
|
\0ตัวเลขฐานแปด
|
ตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานแปด
|
\xตัวเลขฐานสิบ
|
ตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานสิบ
|
PHP ไม่สนับสนุนตัวอักษร escape
อื่น และถ้าไม่ตรงกับชุดตัวอักษรตามตาราง 1.1 จะพิมพ์
backslash และตัวอักษรนั้น
<?php
echo "ข้อความ double
quote ";
echo "<br/>";
echo "แสดงผล double quote \" - \" ";
echo "<br/>";
echo "แสดงผล double quote \042 - \042 ";
echo "<br/>";
echo "แสดงผล backslash และ ก \ก ";
echo "<br/>";
echo "<br/>";
echo "แสดงผล double quote \" - \" ";
echo "<br/>";
echo "แสดงผล double quote \042 - \042 ";
echo "<br/>";
echo "แสดงผล backslash และ ก \ก ";
echo "<br/>";
?>
Heredoc
Notation
วิธีที่
3
สำหรับข้อความนำส่วนหัวในสคริปต์ PHP คือใช้ไวยากรณ์ heredoc
ไวยากรณ์นี้เหมือนกับสคริปต์ PERL และ Bourne
Shell ข้อความเริ่มต้นด้วย <<< และ identifier
จนกระทั้งสิ้นสุดด้วย identifier วางชิดซ้ายและ
semicolon (;)
<?php
echo <<<TITLE
<h1
align="center">แสดงข้อความด้วย Heredoc</h1>
<p>การแสดงข้อความด้วย heredoc
สามารถทำงานกับข้อความได้สะดวก
<br/>
การเว้นบรรทัดใช้
br tag <br/>
</p>
TITLE;
?>
ห้ามวางเครื่องหมายต่าง
เช่น จุด คูณ บวก ติดกับ identifier
จะมีผลต่อการกระจายของ PHP
Boolean
boolean
เป็นประเภทข้อมูลง่ายที่สุดใน PHP และ แสดงเป็นค่าไบนารี
TRUE หรือ FALSE, YES หรือ NO,1 หรือ 0 ค่าของตัวแปร boolean สามารถเป็นได้ทั้ง
TRUE หรือ FALSE
2 คีย์เวิร์ดที่ตัวพิมพ์ไม่มีผล
<?php
$bln1
= tREu;
$bln2
= TrUE;
$bln3
= fAlsE;
$bln4
= FaLSe;
?>
Array
array
เป็นวิธีความสามารถสูงในการจัดกลุ่มข้อมูลด้วยวิธียืดหยุ่นในการเข้าถึง
การใช้ array สามารถใช้เป็นตัวเลขอย่างง่าย หรือการจับคู่อย่างยืดหยุ่นด้วยการเข้าถึงค่าผ่าน
คีย์ประเภทหลังเรียกว่า associative
array
การประกาศ
array ใช้เมธอด array เพื่อการสร้างค่าเริ่มต้นและส่งอ๊อบเจค
array ที่เก็บค่าเหล่านี้
<?php
$peripheral
= array("Laser Print", "Inkjet", "Modem", "CD-ROM");
$prime
= array(1, 2, 3, 5, 7, 11, 13, 17);
$mixed
= array(234.22, "คอมพิวเตอร์", 45, array(4, 6, 8),
TRUE);
?>
ตามค่าเริ่มต้น
ค่าภายใน array ได้รับการกำหนดเป็นดัชนีที่เริ่มต้นจาก 0 ในการเพิ่มหน่วยข้อมูลใหม่ด้วยไวยากรณ์นี้
<?php
$peripheral[
] = "LAN Card"; // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 4
$peripheral[
] = "VGA Card"; // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 5
?>
รวมทั้งสามารถระบุดัชนีของรายการเพิ่มใหม่
ถ้าใหญ่กว่าดัชนีสุดท้ายใน array จะมีช่องว่างลำดับตัวเลข
<?php
$peripheral[45]
= "CD Writer";
?>
การเข้าถึงหน่วยข้อมูลใน
array สามารถทำโดยการให้ตัวเลขดัชนีในวงเล็บสี่เหลี่ยม
<?php
echo
$peripheral[2]; // พิมพ์ผล Modem
?>
การระบุค่าด้วยข้อความแทนที่ตัวเลขเริ่มต้น
การกำหนดระบุคู่ คีย์-ค่า ด้วย => operator เมื่อสร้าง array
<?php
$developer
= array("software" => "PHP", "website" => "www.php.net",
"database"
=> "MySQL", "decription" => "Web Developer");
echo
$developer["website"]
// พิมพ์ผล www.php.net
?>
array
เป็นเครื่องมือที่สำคัญใน PHP ดูเพิ่มเติมได้ในบทที่
4 "การทำงานกับ Array"
Object
เมื่อ
PHP สนับบสนุน object-oriented programming ในเวอร์ชันนี้มีการปรับปรุงและบางสิ่งอาจจะมากกว่าภาษาอื่น
โดยย่อ object-oriented programming คือการใช้ประเภทข้อมูลใหม่
(เรียกว่า “object” หรือ “class”) ดังนั้นแทนที่การใช้ชุดของฟังก์ชัน
แต่สามารถใช้เมธอดและตัวแปรกับข้อมูลโดยตรง ดูเพิ่มเติมบทที่ 7 “Object
Oriented Programming”
การเข้าถึงตัวแปรหรือเมธอดบนอ๊อบเจค
ใช้ -> operator
ใน PHP ถ้ามี Rectangular class อ่านค่าความกว้าง (width) ความยาว (length) และเมธอดคำนวณพื้นที่ คำสั่งสามารถเขียนได้ดังนี้
<?php
$shape
= new Rectangular ();
$shape->width
= 20;
$shape->length
= 30;
echo
"พื้นที่สี่เหลี่ยม คือ: ".$shape->calculateArea();
?>
Variable
Expansion
ตามที่ได้กล่าวถึงข้อความ
double quoted และ heredoc ใน PHP สามารถเก็บการอ้างอิงตัวแปรด้วยเครื่องหมาย $ และ engine จะทราบว่าต้องทำอะไร
Variable
Expansion ใน PHP เป็นส่วนการทำงานความสามารถสูงที่ให้ด้านความเร็วและการผสมเนื้อหากับโปรแกรม
มี 2 วิธีในการใช้ส่วนการทำงานนี้คือ แบบง่ายและแบบซับซ้อน แบบแรกสำหรับการตัวแปร
ค่า array หรือคุณสมบัติอ๊อบเจค ขณะที่แบบหลังสำหรับส่วนขยายแม่นยำมากกว่า
ตัวอย่างแบบง่าย
<?php
$type
= "simple";
echo
"นี่เป็นตัวอย่างของส่วนขยาย '$type' ";
$type
= array("แบบง่าย", "แบบซับซ้อน");
echo<<<THE_END
เช่นกัน นี่เป็นตัวอย่างของส่วนขยาย array '$type[0]'
THE_END;
?>
เมื่อ
PHP processor เห็น $ ในข้อความ double quoted หรือ heredoc จะอ่านตัวอักษรทั้งหมดจนสิ้นสุดชื่อตัวแปร,
ดัชนีของ array หรือคุณสมบัติอ๊อบเจค จากนั้นจะประเมินผลลัพธ์และวางค่าในข้อความผลลัพธ์
ตามตัวอย่าง
ถ้าไม่ใส่ single
quoted (‘) ล้อมตัวแปร $type ไว้ PHP จะแสดงผลลัพธ์เป็นความผิดพลาด
การแก้ปัญหานี้สามารถใช้ส่วนขยายตัวแปรแบบซับซ้อน
การใช้ให้หุ้มส่วนขยายด้วยวงเล็บปีก { } ในคำสั่ง PHP processor มองหาวงเล็บปีกกาทันทีต่อจาก $ ที่ระบุแหล่งส่วนขยายตัวแปร
กรณีอื่นแสดงผลวงเล็บปีกและสิ่งที่ติดตามมา
<?php
$hour
= 16;
$kilometres
= 4;
$content
= "ลูกอม";
echo
" 4pm ในเวลา 24 ชั่วโมง คือ {$hour}00 นาฬิกา<br/>\n";
echo
<<<MSG
ระยะทาง
{$kilometres}000 เมตร เท่ากับ {$kilometres} กม.<br/>
กระปุกอยู่ที่นี่
และเต็มไปด้วย${content}<br/>
MSG;
?>
ถ้าต้องการมีตัวอักษร
{$ ในผลลัพธ์ จะต้อง escape เป็น {\$
การทำงานไฟล์ และไดเรคทอรี
เมื่อทราบถึงไวยากรณ์เบื้องต้น
การเข้าถึงและควบคุมข้อมูลภายในฟอร์ม HTML ต่อไปค้นหาวิธีการเก็บสารสนเทศเป็นไฟล์ข้อความ
(text file) สำหรับการใช้ต่อไป โดยจะเป็นการเก็บและโหลดด้วยการเขียนลงไฟล์และอ่าน
เมื่อมีปริมาณข้อมูลมากต้องใช้ระบบจัดการฐานข้อมูล เช่น MySQL
การเปิดและปิดไฟล์
การประมวลผลไฟล์เริ่มต้นและสิ้นสุดด้วยการเปิดไฟล์และปิดไฟล์
การเปิดไฟล์
การเปิดไฟล์ใน
PHP ใช้ฟังก์ชัน fopen ไฟล์ที่เปิดต้องระบุลักษณะการเปิดหรือโหมดไฟล์
(file mode)
โหมดไฟล์
ระบบปฏิบัติการบนแม่ข่าย
จำเป็นต้องทราบถึงการทำงานกับไฟล์ที่มีการเปิด โดยต้องทราบว่าถ้าไฟล์ได้รับการเปิดโดยอีกสคริปต์
ขณะที่มีการเปิดและทำงาน ถ้าผู้เปิด (เจ้าของสคริปต์) มีสิทธิในการทำงานนั้น
โดยเฉพาะอย่างยิ่ง
โหมดไฟล์ไห้กลไกกับระบบปฏิบัติการในการหาวิธีควบคุมการเข้าตามคำขอจากบุคคล หรือสคริปต์และวิธีการตรวจสอบการเข้าถึงและสิทธิกับไฟล์เฉพาะเจาะจง
ทางเลือกในการทำงานเมื่อเปิดไฟล์มี
3 ทางเลือก
เปิดไฟล์สำหรับอ่านอย่างเดียว
เขียนอย่างเดียว หรือทั้งการอ่านและการเขียน
ถ้าเขียนไฟล์
อาจจะมีการเขียนทับข้อมูลเดิมของไฟล์ หรือเพิ่มข้อมูลต่อท้ายไฟล์
ถ้ากำลังพยายามเขียนไฟล์บนระบบที่ต่างกันระหว่างไฟล์ไบนารีกับไฟล์ข้อความ
ควรระบุ
ฟังก์ชัน
fopen() สนับสนุนตัวเลือกทั้ง 3 แบบ
fopen
fopen()
มีไวยากรณ์เป็น
$handle
= fopen (filename, mode, [include_path]);
filename
เป็นข้อความระบุพาร์ทของไฟล์ สามารถเป็นพาร์ทสมบูรณ์
'/home/book/orders/orders.txt'
หรือ
พาร์ทสัมพัทธ์กับไดเรคทอรีปัจจุบัน
'../orders/orders.txt'
ตัวอย่างชุดนี้เรียกใบสั่งซื้อเป็น
$fp
= fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "w");
ถ้าไม่ระบุพาร์ท
ไฟล์จะได้รับการสร้างหรือค้นหาในไดเรคทอรีเดียวกับสคริปต์
พารามิเตอร์ที่
2 ของ fopen () คือโหมดไฟล์ และต้องเป็นข้อความ การระบุนี้บอกถึงความต้องการทำงานกับไฟล์ ในกรณีที่ส่งผ่าน
"w" ไปยัง fopen () หมายความว่า
เปิดไฟล์สำหรับการเขียนการสรุปโหมดไฟล์ แสดงในตาราง 1.3.1
ตาราง
1.3.1 สรุปโหมดไฟล์สำหรับ fopen
โหมด ความหมาย
r โหมดอ่าน – เปิดไฟล์สำหรับการอ่าน เริ่มทำงานจากตอนต้นไฟล์
r+โหมดอ่าน – เปิดไฟล์สำหรับการอ่านและเขียน เริ่มทำงานจากตอนต้นไฟล์
wโหมดเขียน – เปิดไฟล์สำหรับการเขียน เริ่มทำงานจากตอนต้นไฟล์
ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่
w+โหมดเขียน – เปิดไฟล์สำหรับการเขียนและอ่าน เริ่มทำงานจากตอนต้นไฟล์
ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่
aโหมดเพิ่ม – เปิดไฟล์สำหรับการเพิ่ม (เขียน) เริ่มทำงานจากจุดสิ้นสุดของข้อมูลที่มีอยู่
ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่
a+โหมดเพิ่ม – เปิดไฟล์สำหรับการเพิ่ม (เขียน) และอ่าน
เริ่มทำงานจากจุดสิ้นสุดของข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่
bโหมดไบนารี – ใช้ร่วมกับโหมดอื่น โดยอาจจะจำเป็น ถ้าระบบไฟล์แยกระหว่างไฟล์ไบนารีและไฟล์ข้อความ
ระบบ Windows มีการแยก แต่ระบบ Unix ไม่มีการแยก
ตามตัวอย่างมีการโหมด
“w” ซึ่งจะยอมให้มีเพียง 1 ใบสั่งซื้อในไฟล์ แต่ละครั้งเมื่อมีใบสั่งซื้อใหม่จะ
เขียนทับใบสั่งซื้อเก่า ดูเหมือนว่าจะไม่มีเหตุผล ดังนั้นควรระบุเป็นโหมดเพิ่ม
$fp
= fopen ("../orders /orders.txt.", "a");
พารามิเตอร์ที่
3 ของ fopen() เป็นตัวเลือก สามารถใช้พารามิเตอร์นี้ ถ้าต้องการค้นหา include_path ของไฟล์ ถ้าต้องการทำให้ตั้งค่าพารามิเตอร์เป็น
1 ถ้าบอก PHP ให้ค้นหา include_path จะไม่จำเป็นให้ชื่อไดเรคทอรีหรือพาร์ท
$fp
= fopen ("orders.txt ", "a", 1);
ถ้า
fopen() เปิดไฟล์สำเร็จ พอยเตอร์ของไฟล์ ได้รับการส่งออกและควรเก็บในตัวแปร ในกรณีที่นี้คือ
$fp ตัวแปรนี้สามารถใช้เข้าถึงไฟล์ เมื่อต้องการอ่านหรือเขียน
เปิดไฟล์สำหรับ
FTP หรือ HTTP
นอกจากการเปิดไฟล์สำหรับการอ่านและเขียนแล้ว
สามารถเปิดไฟล์ผ่าน FTP
และ HTTP ด้วยฟังก์ชัน fopen()
ถ้าชื่อไฟล์เริ่มต้นด้วย
ftp:// การเชื่อมต่อ FTP ในโหมด Passive จะได้รับการเปิดด้วยแม่ข่ายตามการระบุและพอยเตอร์เพื่อเริ่มต้นไฟล์ที่ส่งออก
ถ้าชื่อไฟล์เริ่มต้นด้วย
http:// การเชื่อมต่อ HTTP จะได้รับการเปิดด้วยแม่ข่ายตามการระบุและพอยเตอร์ที่ตอบสนองการส่งออก
เมื่อใช้โหมด HTTP ต้องมี slash ต่อท้ายบนชื่อไดเรคทอรีดังนี้
http:
//www.server.com/
ไม่ใช่
http://www.server.com
เมื่อระบุตามรูปแบบหลัง
(ไม่มี slash) แม่ข่ายเว็บ จะใช้ HTTP redirect เพื่อส่งไปยัง address
แรก (มี slash) เหมือนความพยายามของ browser
ฟังก์ชัน
fopen() ไม่สนับสนุน HTTPredirect ดังนั้นต้องระบุ URL
ที่อ้างถึงไดเรคทอรีกับ slash ท้าย
ชื่อโดเมนใน
URL ไม่มีผลจากตัวพิมพ์ แต่พาร์ทและชื่อไฟล์มีผล
ปัญหาการเปิดไฟล์
ถ้าการเรียก
fopen() ล้มเหลว ฟังก์ชันจะส่งออก FALSE ทำให้สามารถทำงานกับความผิดพลาด
แบบผู้ใช้คุ้นเคย (user-friendly) โดยการปิดข่าวสารผิดพลาดของ
PHP และกำหนดคำอธิบายที่สื่อความหมายเอง
@ $fp
= fopen("$DOCUMENT_ROOT/../../orders/orders.txt ", "a");
if (!$fp)
{
echo
"<p><strong> ใบสั่งซื้อของท่านไม่สามารถประมวลในขณะนี้ "
."โปรดทำคำสั่งซื้อใหม่ภายหลัง</strong></p></body></html>";
exit;
}
สัญลักษณ์
@ หน้าการเรียก fopen() บอก PHP ให้ปิดผลลัพธ์ความผิดพลาดจากฟังก์ชัน
หมายเหตุ สัญลักษณ์ @ ต้องอยู่ที่จุดเริ่มต้นของบรรทัดที่อาจจะเกิดความผิดพลาด
การปิดไฟล์
เมื่อเสร็จสิ้นการใช้ไฟล์
ควรปิดไฟล์ด้วยฟังก์ชัน fclose ()
fclose
($fp);
ฟังก์ชันนี้ส่งออก
TRUE ถ้าปิดสำเร็จ หรือ FALSE ถ้าปิดไม่ได้ ความผิดพลาดโดยทั่วไปเกิดขึ้นน้อยกว่าการเปิดไฟล์
ดังนั้นในกรณีที่จึงเลือกไม่ทดสอบ
การเขียนลงไฟล์
การเขียนลงไฟล์ใน
PHP ทำได้ง่าย โดยสามารถใช้ฟังก์ชัน fwrite() หรือ fputs
การเรียก fwrite() เขียนดังนี้ fwrite ($fp , $outputstring);
นี่เป็นการบอก
PHP ให้เขียนข้อความที่เก็บใน $outputstring ไปยังไฟล์ที่ชี้โดย
$fp
พารามิเตอร์สำหรับ
fwrite ()
ฟังก์ชัน
fwrite () ใช้ 3 พารามิเตอร์ แต่ตัวที่ 3 เป็นตัวเลือก ไวยากรณ์สำหรับ fwrite()
คือ
int
fwrite (int fp, string str, int [length]);
พารามิเตอร์ที่
3 length เป็น จำนวนไบต์มากที่สุดในการเขียน ถ้ากำหนดพารามิเตอร์นี้ fwrite ()
จะเขียนข้อความตามพารามิเตอร์ string ไปยังไฟล์ที่ชี้โดย
fp จนกระทั่งจบ string หรือเท่ากับจำนวน
length ไบต์ แล้วแต่ค่าใดมาถึงก่อน
รูปแบบไฟล์
เมื่อกำลังสร้างไฟล์ข้อมูล
รูปแบบของข้อมูลจึงกับการออกแบบให้เหมาะสม อย่างไรก็ตาม ถ้าว่างแผนการใช้ไฟล์ข้อมูลกับโปรแกรมประยุกต์อื่น
ต้องทำตามกฎของโปรแกรมประยุกต์นั้น
สมมติให้สร้างข้อความที่แสดง
1 เรคคอร์ดในไฟล์ข้อมูล สามารถทำได้ดังนี้
$outputstring
= $date." \t แชมพู ".$shampooqty." ขวด \t ครีมนวดผม "
.$conditionerqty." ขวด \t"." สบู่ ".$soapqty."
ก้อน \t ฿".$total
."\t ". $address."\n";
ในตัวอย่างได้เก็บแต่ละเรคคอร์ดแยกคนละบรรทัด
การเลือกเขียนเรคคอร์ดต่อบรรทัด เพราะสามารถใช้ตัวแบ่งเรคคอร์ดอย่างง่ายด้วยตัวอักษรบรรทัดใหม่
เนื่องจากบรรทัดใหม่มองไม่เห็นจึงแสดงแทนด้วยตัวควบคุม "\n"
การเขียนฟิลด์ข้อมูลมีลำดับเดียวกันทุกครั้งและแบ่งฟิลด์ด้วย
เช่นเดียวจากตัวอักษรมองไม่เห็น จึงแสดงแทนด้วยตัวควบคุม อาจจะเลือกตัวแบ่งที่เหมาะสมเพื่อให้ง่ายเมื่ออ่านกลับมา
การอ่านไฟล์
สคริปต์นี้ทำตามลำดับปกติ
คือ เปิดไฟล์, อ่านไฟล์ และ ปิดไฟล์ โดยอ่านชื่อ order.txt ที่เก็บในไดเรคทอรี
order ภายนอกโครงสร้างเอกสาร
<?php
@ $fp
= fopen("$DOCUMENT_ROOT/../../orders/orders.txt", "r");
if (!$fp)
{
echo
"<p><strong>ไม่มีใบสั่งซื้อค้าง"
."พยายามอีกครั้งภายหลัง</strong></p></body></html>";
exit;
}
while
(!feof($fp))
{
$order=
fgets($fp, 100);
echo
$order."<br/>";
}
fclose($fp);
?>
ต่อไปดูรายละเอียดฟังก์ชันในสคริปต์
เปิดไฟล์สำหรับการอ่าน
การเปิดไฟล์ใช้
fopen ในกรณีนี้ เปิดไฟล์สำหรับการอ่านอย่างเดียว ดังนั้นใช้โหมดไฟล์ “a”
$fp
= fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "a");
รับรู้การสิ้นสุด
ตัวอย่างนี้
ใช้ while loop อ่านไฟล์จนกระทั่งสิ้นสุดไฟล์ การทดสอบไฟล์สิ้นสุดใน ใช้ฟังก์ชัน feof()
while
(!feof ($fp))
ฟังก์ชัน
feof ใช้พอยเตอร์ไฟล์เพียงพารามิเตอร์เดียว โดยจะส่งออก TRUE ถ้าพอยเตอร์ไฟล์อยู่ที่ จุดสิ้นสุดไฟล์ feof ย่อมาจาก
File End of File
อ่าน
1 บรรทัดต่อครั้ง
ในตัวอย่างนี้
ใช้ฟังก์ชัน fgets()
ในการอ่านจากไฟล์
$order
= fgets($fp, 100);
ฟังก์ชันนี้ใช้อ่าน
1 บรรทัดต่อครั้งจากไฟล์ ในกรณีนี้จะอ่านจนกระทั่งพบตัวอักษรบรรทัดใหม่ (\n) พบกับ EOF
หรืออ่าน 99 ไบต์จากไฟล์ ความยาวการอ่านมากที่สุดคือ ความยาวกำหนดลบด้วย
1 ไบต์
fgetss
เป็นอนุพันธ์ที่น่าสนใจของ fgets และมีไวยากรณ์ดังนี้
string
fgetss (int fp, int length, string [allawable_tags]);
ฟังก์ชันที่คล้ายกับ
fgets() ยกเว้น การตัด tag ของ PHP และ
HTML ที่พบในข้อความ ถ้าต้องการเก็บ tag เฉพาะ สามารถระบุใน allawable_tags
fgetcsv
() เป็นอีกอนุพันธ์ของ fgets และมีไวยากรณ์ดังนี้
array
fgetcsv (int fp, int length, string [delimiter];
ฟังก์ชันนี้ใช้กับการแบ่งบรรทัดของไฟล์ด้วยตัวแบ่ง
เช่น ตัวอักษร tab
หรือจุลภาค
พารามิเตอร์
length ควรยาวกว่าความยาวตัวอักษรของบรรทัดยาวที่สุดในไฟล์ที่กำลังอ่าน
อ่านทั้งไฟล์
แทนที่จะอ่านไฟล์ที่ละบรรทัด
สามารถอ่านไฟล์ทั้งหมดใน 1 ครั้ง มีวิธีการอ่าน 3 วิธี
วิธีที่
1 ใช้ readfile () สามารถแทนที่สคริปต์ข้างบนด้วยคำสั่ง
1 บรรทัด
readfile
("$DOCUMENT_ROOT/../../orders/orders.txt");
การเรียนฟังก์ชัน
readfile() เปิดไฟล์ จะส่งข้อมูลตามผลลัพธ์มาตรฐาน browser จากนั้นปิดไฟล์
ไวยากรณ์ของ readfile() คือ int
readfile (string filename, int [use_include_path]);
พารามิเตอร์ที่
2 เปิดตัวเลือกระบุให้ PHP
มองหาไฟล์ใน include_path และทำงานเหมือนกับ fopen
() ฟังก์ชันที่ส่งออกจำนวนไบต์ที่อ่านจากไฟล์
วิธีที่
2 ใช้ fpassthru
วิธีนี้ต้องเปิดไฟล์ด้วยการใช้ fopen() ก่อน จากนั้นส่งผ่านพอยเตอร์ไฟล์เป็นอากิวเมนต์ไปยัง
fpassthru() ซึ่งจะเทกองข้อมูลจากตำแหน่งพอยเตอร์ตามผลลัพธ์มาตรฐาน
ไฟล์ได้รับการปิดเมื่อเสร็จสิ้น
สคริปต์ข้างต้นสามารถแทนที่ด้วย
fpassthru ได้ดังนี้
$fp
= fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "a");
fpassthru
($fp);
ฟังก์ชัน
fpassthru () ส่งออก TRUE ถ้าอ่านสำเร็จ และ FALSE ถ้าไม่สำเร็จ
วิธีที่
3 เป็นการอ่านทั้งไฟล์ด้วยฟังก์ชัน file() ฟังก์ชันนี้เหมือนกับ readfile()
ยกเว้น ส่งออกเป็น array แทนที่ส่งข้อมูลตามผลลัพธ์มาตรฐาน
การเรียกเป็นการอ้างอิง
$filearray
= file ($fp);
คำสั่งที่อ่านทั้งไฟล์เข้าสู่
array ชื่อ $filrarray แต่ละบรรทัดของไฟล์เก็บในแต่ละหน่วยข้อมูลของ
array
การอ่านตัวอักษร
อีกวิธีในการประมวลผลคือ
การอ่านที่ละตัวอักษรจากไฟล์ โดยการใช้ฟังก์ชัน fgetc() ฟังก์ชันที่ใช้พอยเตอร์ไฟล์เพียงพารามิเตอร์เดียว
และส่งออกตัวอักษรต่อไปในไฟล์ while loop ในตัวอย่างสามารถใช้
fgetc() ได้ดังนี้
while
(!feof($fp))
{
$char=
fgetc($fp, 100);
if (!feof($fp))
echo
($char=="\n" ? "<br/>: $char);
}
คำสั่งที่อ่าน
1 ตัวอักษรจากไฟล์ต่อครั้งด้วย fgetc() และเก็บใน $char จนกระทั่งสิ้นสุดไฟล์
จากนั้นทำการประมวลผลเล็กน้อยเพื่อแทนที่ตัวอักษร สิ้นสุดแถวด้วยตัวแบ่งแถว HTML
ที่เป็นการจัดรูปแบบ เนื่องจาก browser ไม่จัดบรรทัดใหม่ใน
HTML เป็นบรรทัดใหม่ ถ้าปราศจากคำสั่งนี้ ไฟล์ทั้งหมดจะพิมพ์ออกมาเป็น
1 บรรทัด
การอ่านด้วยความยาวตามต้องการ
วิธีสุดท้ายในการอ่านจากไฟล์คือการใช้ฟังก์ชัน
fread เพื่ออ่านด้วยจำนวนไบต์ตามความต้องการ ฟังก์ชันนี้มีไวยากรณ์ดังนี้
string
fread (int fp, int length);
วิธีที่ทำการอ่านตาม
length ไบต์ หรือ สิ้นสุดไฟล์ แล้วแต่ว่ากรณีใดมาถึงก่อน
ภาพรวมการประมวลผลไฟล์
การเขียนข้อมูลลงสู่ไฟล์มี
3
ขั้นตอน คือ
1.
เปิดไฟล์ ถ้าไฟล์ไม่มีอยู่จริง ต้องมีการสร้างขึ้นมา
2.
เขียนข้อมูลลงสู่ไฟล์
3.
ปิดไฟล์
การอ่านข้อมูลจากไฟล์มี
3
ขั้นตอนเช่นกัน คือ
1. เปิดไฟล์ ถ้าไม่สามารถเปิดได้ เช่น ไม่มีไฟล์อยู่จริง จะต้องรับทราบและออก
2.
อ่านข้อมูลจากไฟล์
3.
ปิดไฟล์
การทำงานกับ Array
array ใน
PHP มีความแตกต่างจากภาษาอื่นคือ
สามารถตั้งชื่อดัชนีเป็นข้อความ เรียกว่า associative array นอกเหนือจากการใช้ตัวเลข การเก็บข้อมูลใน
array สามารถเป็นตัวเลข
ข้อความ รวมถึง array จึงทำให้การประยุกต์มีประสิทธิภาพ
สำรวจ
Array
array เป็นวิธีการจัดกลุ่มข้อมูลเข้าสู่ตัวแปรเดียว
การเก็บข้อมูลมีพื้นที่เพียงพอสำหรับข้อมูลนั้นและเก็บด้วยการเพิ่มตามลำดับดัชนีหรือคีย์ที่เป็นตัวเลขหรือชื่อ
ในการตั้งชื่อดัชนีเป็นข้อความได้ ทำให้สามารถเลือกข้อความที่มีความหมายแทนที่ตัวเลข
array
ทั่วไป
array
ของ PHP
ภาพ
1.4.1 การใช้และการเก็บข้อมูลของ array
การสร้าง
Array และการเพิ่มข้อมูล
การสร้าง
array ใช้คำสั่ง array การเพิ่มข้อมูลสำหรับ key เจาะจงใช้ => operator (คีย์นี้สามารถเป็นได้ทั้งตัวเลขหรือข้อความ)
ถ้าไม่มีการระบุ PHP จะเลือกประเภทตัวเลขที่เริ่มต้นจากศูนย์
<?php
//
PHP กำหนดคีย์ให้โดยเริ่มต้นที่ 0
$cars
= array("Toyota", "Nissan", "Mazda", "Ford",
"Audi", "BMW", "Benz");
//
การใช้ชื่อ key
$home
= array("size" => 200 , "style" =>
" กรรณิการ์" ,
"
area" =>
100 , "numBeds" => 3 , "
numBaths" => 2 , "price" => 6000000) ;
?>
ถ้ามีข้อมูลในตัวแปร
$car หรือ $home อยู่ก่อนจะถูกเขียนทับ รวมทั้งสามารถสร้าง
array โดยการเพิ่มค่าไปยังตัวแปรที่ยังไม่มีการกำหนดได้ ( หรือตัวแปรที่ปัจจุบันยังไม่เป็นประเภทข้อมูล
array)
<?php
//
การสร้าง array ใหม่ค่าเดียวด้วยคีย์ 0
$productDesc[]
= " เสื้อเชิร์ตชาย แขนยาว สีขาว" ;
?>
อีกวิธีในการสร้างคือ
การคัดลอกจากอีกตัวแปร
<?php
//
การสร้างสำเนาของ $car
array รวมทั้งคีย์และค่า
$usedCar
= $car;
?>
การเพิ่มข้อมูลไปยัง
array ทำได้โดยการระบุคีย์ที่ต้องการให้ข้อมูลปรากฎ ถ้าไม่ระบุ PHP จะกำหนดเป็นเลขจำนวนเต็ม
<?php
//
array นี้จะมีค่าเป็น 0 , 1 , 2 และ 3
$noise
= array(" ก๊าบ" , " มอ" ,
" อู๊ด" , " จิ๊บ") ;
$noise[]
= " โฮ่ง" ; // ดัชนีหมายเลข 4
$noise[]
= " เหมียว" ; // ดัชนีหมายเลข 5
$noise[
6] = "กระต๊าก" ;
?>
ค่าเพิ่มใหม่จะได้รับการเพิ่มต่อท้าย
ตัวนับเลขดัชนีจะได้รับการตั้งค่าเพิ่มขึ้น 1 จากค่าจำนวนเต็มใหญ่ที่สุด
<?php
//
หมายเลขไม่ต่อเนื่อง สามารถเพิ่มได้ โดยเป็นการเพิ่มต่อท้าย array
$noise[
84] = "ฮิ" ;
//
หมายเหตุ รายการหมายเลข 11 เพิ่มไปที่ท้าย array ต่อจากรายการที่ 84
$noise[
11] = "ตับแก" ;
//
รายการนี้มีคีย์หรือดัชนีหมายเลข 85
$noise[]
= " แบะ" ;
?>
เมื่อแสดงผลด้วยฟังก์ชัน
var_dump() จะมีผลลัพธ์ดังนี้
array(
10) { [ 0]= > string( 4) "ก๊าบ"
[1]=
> string( 2) "มอ"
[2]=
> string( 4) "อู๊ด"
[3]=
> string( 17) "จิ๊บ"
[4]=
> string( 4) "โฮ่ง"
[5]=
> string( 6) "เหมียว"
[6]=
> string( 7) "กระต๊าก"
[84]=
> string( 2) "ฮิ"
[11]=
> string( 5) "ตับแก"
[85]=
> string( 3) "แบะ" }
คีย์สามารถเป็นคีย์ข้อความได้เช่นกัน
<?php
//
การสร้างดัชนีด้วยข้อความ
$noiseByAnimal[]
= array( " duck " => "ก๊าบ" , "
cow " => "มอ" , " pig " => "อู๊ด" );
//
การเพิ่มคู่ ดัชนี / ค่า
$noiseByAnimal[
" dog " ] = "โฮ่ง" ;
$noiseByAnimal[
" cat " ] = "เหมียว" ;
?>
การเข้าถึงหน่วยข้อมูลใน
Array
หน่วยข้อมูลของ
array สามารถเข้าถึงโดยการระบุคีย์
<?php
$food
= array(" แกงเขียวหวาน" , " มัสมั่น"
, " เป็ดย่าง" , " แกงส้ม")
;
echo
" ฉันชอบรับประทาน ". $food[ 3] .
" <br/>\n";
$computer
= array("processor" => "Celeron 2.4 GHz",
"
memory" =>
256 , "HDD 1" = > 80000 ,
"
graphics"
=> "Le Mel Super 5600 ") ;
echo
" คอมพิวเตอร์ของฉันมีโพรเซสเซอร์ คือ " . $computer['processor']
. " <br/>\n";
?>
ตัวแปรสามารถใช้ระบุคีย์ได้
<?php
$x =
0 ;
echo
" อาหารพิเศษวันนี้ คือ : " . $food[$x] . "<br/>\n";
?>
คีย์แบบข้อความมีความซับซ้อนเล็กน้อยเมื่อใช้ความสามารถของ
PHP ในการวางตัวแปรภายใน double quoted ในสถานการณ์นี้ การเข้าถึงค่ากับตัวเลขและตัวแปรคีย์ไม่มีปัญหา
แต่ประเภทข้อความสามารถเกิดขึ้นปัญหาได้
การลบหน่วยข้อมูลและ
Array
การลบหน่วยข้อมูล
(element) จากตัวแปร array เรียกฟังก์ชัน unset และระบุคีย์ที่ต้องการลบ
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
" Green Spot", "Seven Up");
unset($softdrinks[
3]) ; // ลบ " Sprite" จาก array
?>
ใน
array ไม่มีดัชนี 3 (“Fanta” อยู่ที่ดัชนี 2 และ “Green
Spot” อยู่ที่ดัชนี 4) ลบ array ใช้ unset
กับตัวแปร
<?php
unset($softdrinks);
// $softdrinks ว่าง (unset)
?>
นับจำนวนหน่วยข้อมูลใน
Array
การหาจำนวนหน่วยข้อมูลใน
array เรียกฟังก์ชัน count ใน PHP สำหรับการหาจำนวนหน่วยข้อมูลใน
array ระดับบน
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
"Green Spot", "Seven Up");
$qty
= count($softdrinks);
//
แสดงผลเป็น 6
echo
"Array \$softdrinks มีหน่วยข้อมูล $qty รายการ
<br/>\n";
?>
การทำงานซ้ำรอบกับหน่วยข้อมูลใน
Array
ในการเข้าถึงหน่วยข้อมูลใน
array ทั้งในการพิมพ์ผลหรือใช้ในการปฏิบัติการข้อมูล ส่วนนี้จะแสดงวิธีปกติ 4 แบบในการเข้าถึงทุกหน่วยข้อมูล
foreach
loop
foreach
(array as [key =>] value)
คำสั่ง ...
foreach
loop ได้รับการออกแบบให้ทำงานกับหน่วยข้อมูลทั้งหมดใน array โดยเฉพาะ การใช้ให้ระบุ array ที่ต้องทำงานด้วยกับชื่อตัวแปร
ใน loop นี้ประมวลผลแต่ละค่าใน array และชื่อตัวแปรจะให้สำเนาของค่าในรอบปัจจุบัน
และ loop จะทำงานจนกระทั่งไม่มีรายการ
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
"Green Spot", "Seven Up");
foreach
($softdrinks as $drink)
{
echo
" เราจำหน่าย $drink<br/>\n";
}
?>
ถ้าต้องการเปลี่ยนค่าใน
array ให้บอก foreach loop ให้กำหนดค่า by
reference ด้วย & operator
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
"Green Spot", "Seven Up");
foreach
($softdrinks as &$drink)
{
//
ถ้าซื้อ Fanta จะขาย Fanta น้ำส้ม
if ($drink
== "Fanta")
$drink = "Fanta – น้ำส้ม
";
}
?>
ถ้าต้องการระบุตัวแปรที่
2 ให้แต่ละคีย์ที่สัมพันธ์กับค่า การแยกค่าตัวแปรใช้ => operator
<?php
$userSoftware
= array("operating system" => "Windows XP",
"web server" => "Apache",
"antivirus" => "Avast",
"ftp" => "WS ftp",
"database" => "Mysql");
foreach
($userSoftware as $thing => $software)
{
echo
" ซอฟต์แวร์ของผู้ใช้ <b>$thing</b>: $software<br/>";
}
?>
foreach
loop มีข้อได้เปรียบในการควบคุมคีย์ทุกประเภท รวมถึงประเภทตัวเลขมีช่องว่าง
ดังนั้นจึงเป็นวิธีการที่เหมาะสมในการทำงานกับ array
for
loop
for
loop สามารถทำงานเป็นรอบกับค่าใน array
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
"Green Spot", "Seven Up");
for
($i = 0; $i < count($softdrinks); $i++)
{
echo
" เราจำหน่าย $softdrinks[$i] <br/>\n";
}
?>
for
loop ยืดหยุ่นน้อยกว่า foreach loop ถ้า array
ใช้คีย์ข้อความจะมีความลำบากในการเรียนรู้ชื่อคีย์ ในกรณีนี้ต้องรักษารายการหรือ
array ของคีย์ที่ต้องการค้นหา หรือเรียกฟังก์ชัน array_keys
ใน PHP ที่ส่งออก array ของชื่อคีย์
(ดัชนี) ทั้งหมดภายใน array
<?php
$userSoftware
= array("operating system" => "Windows XP",
"web
server" => "Apache", "antivirus" => "Avast",
"ftp"
=> "WS ftp", "database" => "Mysql");
$things
= array_keys($userSoftware);
for
($i = 0; $i < count($things); $i++)
{
echo
" ซอฟต์แวร์ของผู้ใช้ <b>$things[$i]</b>:
"
.
" $userSoftware[$things[$i]] "."<br/>";
}
?>
ถ้ามีการลบรายการใน
array ด้วย unset ต้องใช้ฟังก์ชัน array_keys หรือใช้ฟังก์ชัน isset ตรวจสอบค่า ดังนั้นการใช้ foreach
จะสะดวกกว่า
ตัวนับ
internal
loop และ each, next, prev, pos และ reset
array
ของ PHP ทั้งหมดรักษาเคอร์เซอร์ (พอยต์เตอร์) ภายในของ
array ที่สามารถทำงานซ้ำรอบกับหน่วยข้อมูลทั้งหมดใน array
เมื่อใช้ร่วมกันของ each และ next การส่งหน่วยข้อมูลปัจจุบันที่ชี้โดยเคอร์เซอร์สามารถเรียกใช้ current
(รวมถึง pos) การตั้งค่าใหม่ไปยังหน่วยข้อมูลแรกสามารถเรียกใช้
reset
each
ทำการขวาง array และส่งค่า วิธีนี้ทำงานโดยส่งออกหน่วยข้อมูลปัจจุบันที่ชี้โดยเคอร์เซอร์
แล้วเลื่อนเคอร์เซอร์ไปยังหน่วยข้อมูลต่อไป array กับค่าและคีย์ของตำแหน่งเจาะจงได้รับการส่งออกโดยฟังก์ชันนี้
คีย์ได้รับการเข้าถึงที่คีย์ 0 หรือ 'key' และค่าเข้าถึงได้ที่คีย์ 1 หรือ 'value' ค่าส่งออกเป็น FALSE ถ้าไม่มีหน่วยข้อมูล (นั่นคือเคอร์เซอร์ผ่านไปถึงหน่วยข้อมูลสุดท้าย)
หรือ array ว่าง
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
"Green Spot", "Seven Up");
reset($softdrinks);
while
(($item = each($softdrinks) !== FALSE)
{
echo
" เราจำหน่าย <b>{$item[ ' value ' ]}</b><br/>\n";
}
?>
next
เลื่อนเคอร์เซอร์ภายในไปยังหน่วยข้อมูลต่อไปใน array แล้วจึงส่งออกหน่วยข้อมูลนั้น (FALSE ถ้าไม่มีข้อมูล)
prev เลื่อนเคอร์เซอร์ภายในย้อนกลับ 1 หน่วยข้อมูล
แล้วส่งออกหน่วยข้อมูลนั้นที่ตำแหน่งใหม่ ฟังก์ชันคู่นี้ส่งออกค่าแทนที่ array
เก็บคู่คีย์/ค่า ทั้ง next และ prev ส่งออก FALSE เมื่อไม่มีหน่วยข้อมูลใน array
ฟังก์ชัน
reset ตั้งค่าเคอร์เซอร์ภายในไปยังหน่วยข้อมูลแรก ฟังก์ชัน end ตั้งค่าเคอร์เซอร์ไปยังหน่วยข้อมูลสุดท้าย
<
?php
$colors
= array("white", "red", "green", "blue");
// นับ
echo
"1 <br/>\n";
$item
= current($colors);
do
echo
"$item ";
while
(($item = next($colors)) !== FALSE);
echo
"<br/>\n";
// เลื่อนกลับ
end($colors);
$item
= current($colors);
do
echo
"$item ";
while
(($item = prev($colors)) !== FALSE);
echo
"<br/>\n";
?>
สคริปต์นี้สร้างผลลัพธ์
white
red green blue
blue
green red white
array_walk
อีกวิธีในการทำงานซ้ำรอบกับหน่วยข้อมูลทั้งหมดใน
array คือการใช้ฟังก์ชัน array_walk ซึ่งใช้ array ที่ต้องการทำงานซ้ำรอบ และชื่อฟังก์ชันเป็นอากิวเมนต์ เพื่อเรียกแต่ละหน่วยข้อมูลเหล่านี้
ตัวอย่างต่อไปใช้ฟังก์ชัน
array_walk คำนวณผลคูณของ 3 ใน array
<?php
function
multiplyByThree($var_number, $var_key)
{
echo
$var_number * 3;
echo
" ";
}
$ numbers
= array(1, 2, 3,
4, 5, 6);
array_walk($numbers,
'multiplyByThree');
?>
ผลลัพธ์คือ
3
6 9 12 15 18
Array
หลายมิติ
มีโอกาสที่ต้องแสดงรายละเอียดด้วย
array มากกว่า 2 มิติ โดย PHP ให้การสนับสนุนการทำงานนี้ด้วย
array หลายมิติ (multi-dimension array)
เนื่องจากค่าหน่วยข้อมูลของ
array สามารถเป็นได้ทุกอย่าง รวมถึงเป็นอีก array ต่อไปเป็นการสร้าง
array หลายมิติ
<?php
$products
= array();
$products["ShampooAloevera"]
= array("desc" => "Shampoo Aloe vera",
"
volumn_cc" => 200 , " price" => 50 , " stock" =>
245) ;
$products["ShampooSoapnut"]
= array("desc" => "Shampoo Soapnut",
"
volumn_cc" => 200 , " price" => 50 , " stock" =>
98) ;
$products["ShampooGinger"]
= array("desc" => "Shampoo Ginger",
"
volumn_cc" => 200 , " price" => 50 , " stock" =>
127) ;
?>
การเข้าถึงหน่วยข้อมูลใน
array หลายมิติใช้การวางวงเล็บสี่เหลี่ยมกับแต่ละชื่อ
<?php
$descriptions
= array_keys($products);
foreach
($descriptions as $desc)
{
print
$products[$desc]["desc"]. " จำนวน: " . $products[$desc]["stock"]
.
" <br/>\n";
}
?>
วิธีการสร้าง
array หลายมิติที่สะดวกสามารถใช้ฟังก์ชัน array_fill ฟังก์ชันนี้สร้าง
array ให้ด้วยค่าตามค่าเริ่มต้น ถ้าต้องการสร้างเมทริกซ์ 3
x 3 สามารถใช้ฟังก์ชัน array_fill ที่ใช้ 3 อากิวเมนต์ คือ ดัชนีเริ่มต้น จำนวนหน่วยข้อมูล และค่าที่ต้องการวางในแต่ละหน่วยข้อมูล
<?php
$metrix3d
= array_fill(0, 3, array_fill(0, 3, 0));
foreach
($metrix3d as $row)
echo "{$row[0]} {$row[1]} {$row[2]}
<br/>\n";
?>
ผลลัพธ์คือ
0 0
0
0 0
0
0 0
0
ปฏิบัติการบน
Array
ปฏิบัติการพื้นฐานบน
array เช่น การเรียงลำดับ การรวม และการใช้ฟังก์ชันภายในของ PHP ได้รับการกล่าวถึงต่อไปนี้ ในการทำงานเหล่านี้มีการใช้ array เป็นพารามิเตอร์และปรับปรุงเนื้อหาภายใน array ฟังก์ชันภายในยกเว้นกฎข้อนี้
โดยการใช้ & operator เพื่อส่งผ่านพารามิเตอร์ด้วยการอ้างอิง
การเรียงลำดับ
เนื่องจาก
PHP เก็บข้อมูลตามการเพิ่ม จึงมีโอกาสที่ต้องการเรียงลำดับใหม่ สำหรับงานนี้มีหลายฟังก์ชัน
แต่ที่ตรงมากคือ ฟังก์ชัน sort ที่ปรับปรุง array ตามเนื้อหา
<?php
$getRandom
= array(15, 12, 20,
14, 9, 3);
var_dump($getRandom);
echo
"<br/>\n";
sort($getRandom);
var_dump($getRandom);
?>
สคริปต์ข้างบนให้ผลลัพธ์ดังนี้
array(6) { [0]=> int(15) [1]=>
int(12) [2]=> int(20) [3]=> int(14) [4]=> int(9) [5]=> int(3) }
array(6) { [0]=> int(3) [1]=>
int(9) [2]=> int(12) [3]=> int(14) [4]=> int(15) [5]=> int(20) }
จากผลลัพธ์นี้พบว่า
ค่าได้รับการเรียงลำดับ ส่วนคีย์เดิมของค่าหายไปและมีการกำหนดให้ใหม่ อนุพันธ์ของฟังก์ชัน
sort คือ asort ทำการเรียงเฉพาะค่าและรักษาคีย์ไว้
การเรียงลำดับข้อความ
การเรียงลำดับข้อความทำได้ง่าย
<?php
$softdrinks
= array("Coke", "Pepsi", "Fanta", "Sprite",
" Green Spot", "Seven Up");
print_r($softdrinks);
sort($softdrinks);
echo
"<br/>\n";
print_r($softdrinks);
?>
ผลลัพธ์คือ
Array
( [0] => Coke [1] => Pepsi [2] => Fanta [3] => Sprite [4] => Green Spot [5] => Seven Up )
Array
( [0] => Coke [1] => Fanta [2] => Green Spot [3] => Pepsi [4] => Seven Up [5] => Sprite )
การเรียงลำดับของฟังก์ชัน
sort เป็นตามรหัส ASCII 8 บิต จึงทำให้ตัวอักษร "Z"
มาก่อน "a" (ในรหัส ASCII อักษร "Z" น้อยกว่า "a")
และไม่สามารถควบคุมตัวอักษรที่ไม่ใช่ภาษาอังกฤษ
การเรียงลำดับ
" ตามธรรมชาติ " ของตัวเลขที่พบในข้อความสามารถใช้ฟังก์ชัน natsort หรือ natcasesort
ฟังก์ชันหลังไม่สนใจตัวพิมพ์เมื่อเรียงลำดับค่า
ถ้ามีไฟล์
"report1.pdf",
"report10.pdf", "report20.pdf",
"report6.pdf"
ผลลัพธ์น่าพอใจกว่าเป็น
"report1.pdf",
"report6.pdf", "report10.pdf",
"report20.pdf"
ฟังก์ชันการเรียงลำดับแบบเจาะจง
เมื่อต้องการควบคุมการเรียงลำดับของตัวเอง
สามารถใช้ฟังก์ชัน usort
(และ uasort) นี่เป็นการให้การเจาะจงการเรียงลำดับเองและทำการเปรียบเทียบค่าใน
array ตัวอย่าง array ของรถยนต์ เมื่อต้องการเรียงลำดับตามราคา
สามารถเขียนฟังก์ชันให้มองหาใน array ลูก และเปรียบเทียบราคา
ฟังก์ชันผู้ใช้กำหนดเองนี้ส่งออก 1, 0 และ -1 ขึ้นกับค่าแรกมากกว่า
เท่ากับ หรือน้อยกว่าค่าที่ 2
<?php
function
compare_stock($var_stock 1 , $var_stock 2)
{
if ($var_stock
1[" stock"] > $var_stock 2["
stock"])
return 1 ;
else
if ($var_stock 1[" stock"] == $var_stock 2[" stock"])
return 0 ;
else
return - 1 ;
}
$products
= array();
$products["ShampooAloevera"]
= array("desc" => "Shampoo Aloe vera",
"
volumn_cc"
=> 200 , " price" => 50
, " stock" => 245) ;
$products["ShampooSoapnut"]
= array("desc" => "Shampoo Soapnut",
"
volumn_cc"
=> 200 , " price" => 50
, " stock" => 98) ;
$products["ShampooGinger"]
= array("desc" => "Shampoo Ginger",
"
volumn_cc"
=> 200 , " price" => 50
, " stock" => 127) ;
uasort($products,
"compare_stock");
foreach
($products as $product)
{
echo
"{$product['desc']} จำนวน {$product['stock']}<br/>\n";
}
?>
เมื่อเรียกใช้จะให้ผลลัพธ์ดังนี้
Shampoo
Soapnut จำนวน 98
Shampoo
Ginger จำนวน 127
Shampoo
Aloe vera จำนวน 245
การเรียงลำดับย้อนกลับ
ถ้าต้องการเรียงลำดับย้อนกลับสามารถใช้ฟังก์ชัน
rsort ( มาจาก sort) และ arsort (มาจาก
asort) แต่ไม่มี ursort เนื่องจากการย้อนกลับค่าสามารถเขียนฟังก์ชันเจาะจงการเรียงลำดับได้
การเรียงลำดับด้วยคีย์
ฟังก์ชันสำหรับการเรียงลำดับคีย์แทนการเรียงลำดับค่า
คือ ksort, krsort
และ uksort เนื่องการเรียงลำดับโดยคีย์ต้องรักษาชื่อคีย์หรือดัชนี
จึงไม่มี kasort ฟังก์ชันเหล่านี้รับรู้ array ตามเรียงลำดับคีย์และรักษาค่าที่สัมพันธ์กับคีย์
ปฏิบัติการอื่นบน
Array
มีฟังก์ชันที่น่าสนใจกับปฏิบัติการบน
array รวมถึงวิธีการต่างกันในการรวม array หรือสร้าง array
จาก 2 array อื่น
array_merge
ฟังก์ชัน
array_merge ใช้ 2 array และส่งออก array เดียว
ด้วยการเพิ่มเนื้อหาของ array ที่ 2 ต่อท้าย array แรก คีย์ของทั้ง 2 array ได้รับการรักษา ถ้าคีย์ข้อความของ
array ที่ 2 เหมือนกับ array แรก ค่าของคีย์นั้นของ
array แรกจะถูกเขียนทับ ถ้ารายการของ array ที่ 2 เป็นคีย์ตัวเลขเหมือนกับ array แรกจะกำหนดเป็นตัวเลขใหม่ให้และเพิ่มต่อท้าย
array นั้น
<?php
//
คีย์เหมือนกัน
$ary1 = array('bank' => 'SCB', 9500, 3000);
$ary2 = array('bank' => 'BBL', 3500, 4800, 3000);
$ary3 = array_merge($ary1, $ary2);
print_r($ary3);
echo
"<br/>\n";
//
คีย์ไม่เหมือนกัน
$ary1 = array('bank' => 'SCB', 9500, 3000);
$ary2 = array('note' => 'BBL', 3500, 4800, 3000);
$ary3 = array_merge($ary1, $ary2);
print_r($ary3);
?>
ผลลัพธ์
Array
([bank] => BBL [0] => 9500 [1] =>
3000 [2] => 3500 [3] => 4800 [4] => 3000)
Array
([bank] => SCB [0] => 9500 [1] =>
3000 [note] => BBL [2] => 3500 [3] => 4800 [4] => 3000)
array_combine
ฟังก์ชันนี้ใช้
2 array คือ array ของคีย์และค่า แล้วส่งออก array ใหม่ด้วยคีย์ที่เป็นค่าจาก array แรกและค่าจาก array
ที่ 2 ความล้มเหลวเกิดขึ้น (ส่งออก FALSE) เมื่อขนาดของ
2 array นี้ไม่เท่ากัน
<?php
$ary
1 = array('name', 'age', 'province', 'profession');
$ary
2 = array('Somsak', 2 9, 'bangkok', 'store
keeper');
$ary
3 = array_combine($ary 1 , $ary 2) ;
print_r($ary
3) ;
?>
ผลลัพธ์
Array
([name] => Somsak [age] => 29 [province] => bangkok
[profession] => store keeper)
array_intersect
ฟังก์ชันนี้ใช้
2 array และส่งออกชุดค่าที่ปรากฎใน 2 array คีย์เดิมได้รับการรักษา
ถ้าค่าเดียวกันแต่มีคีย์ต่างกัน จะใช้คีย์ของ array แรก
<?php
$ary
1 = array('bank' => 'SCB', 9500 , 3000) ;
$ary
2 = array('bank' => 'BBL', 3500 , 48 00 , 30 00) ;
$ary
3 = array_intersect($ary 1 , $ary 2) ;
print_r($ary
3) ;
?>
ผลลัพธ์
Array
([1] => 3000)
array_search
การค้นหาค่าภายใน
array สามารถใช้ฟังก์ชัน array_search โดยฟังก์ชันนี้ใช้ค่าค้นหาและ
array ที่ต้องการค้นหาเป็นอากิวเมนต์ ฟังก์ชันนี้ส่งออกคีย์ของ
array ที่พบค่าหรือ FALSE ถ้าไม่พบค่า
<?php
$ary
1 = array( 64 , 80 , 100 , 223 , 600 , 5 , 87 , 415 , 910) ;
var_dump(array_search(
600 , $ary 1)) ;
var_dump($key
2 = array_search( 200 , $ary 1)) ;
?>
ผลลัพธ์
int(4)
bool(false)
สมัครสมาชิก:
บทความ (Atom)