33
บทที3 ฟังก์ชันมาตรฐานของภาษา PHP นอกเหนือจากหลักสำคัญของภาษาที่กล่าวถึงในบทที2 แล้ว ส่วนประกอบที่สำคัญอีก ส่วนหนึ่งในการสร้าง web program หรือโปรแกรมทั่วไป คือการใช้ฟังก์ชันที่เตรียมไว้ใน ภาษานั้นๆ (predefined หรือ standard function) มีทั้งฟังก์ชันที่สามารถใช้งานได้เป็น มาตรฐาน และฟังก์ชันที่ต้องนำเข้าจากไลบราลีซึ่งเป็นไฟล์ที่รวมเอาฟังก์ชันที่ใช้งานเป็นเรื่องๆ หรือแยกเป็นกลุ่มตามหน้าที่ของฟังก์ชัน ซึ่งเราอาจจะได้พบเห็นคำว่า API. หรือ Application Program Interface ก็คือกลุ่มของฟังก์ชันที่โปรแกรมระบบต่างๆ เตรียมไว้ให้ผู้เขียน โปรแกรมเรียกใช้ประโยชน์ หากเป็นภาษาโปรแกรมแบบ Object Oriented Programming ก็จะมีการเตรียม class เพื่อใช้สร้าง object ที่มี method ที่เทียบเท่ากับฟังก์ชัน เพื่อให้ application ต่างๆ สามารถนำมาใช้ประโยชน์ได้ในลักษณะเดียวกัน สำหรับภาษา PHP มีฟังก์ชันอยู่เป็นจำนวนมากนับพันฟังก์ชัน แบ่งออกเป็นกลุ่ม ฟังก์ชันที่สนับสนุนการดำเนินการในหลากหลายด้าน เนื่องจากเป็นภาษาที่เป็น opensource และ freeware ทำให้มีผู้ร่วมกันสร้างฟังก์ชันต่างๆ และถูกนำมาใช้เป็นมาตรฐานของ PHP อยูมากมาย ฟังก์ชันจำนวนหนึ่งสามารถใช้งานกับ PHP engine ที่ติดตั้งได้ทุกระบบ แต่บางกลุ่ม ของฟังก์ชันจะต้องถูกติดตั้งและระบุใน configuration file ของ PHP เนื่องจากเป็นฟังก์ชันทีอาจจะไม่ได้ใช้งานกันโดยทั่วไป แต่ก็สามารถ download ส่วนประกอบที่เรียกว่า extension หรือส่วนขยายของฟังก์ชันแต่ละกลุ่ม เพื่อนำมาติดตั้งได้ตามลักษณะการใช้งานที่ต้องการ ซึ่ง ใน manual ของ PHP. จะระบุกลุ่มของฟังก์ชันต่างๆ ที่มี ชื่อ extension module ที่ต้องติด ตั้ง (สำหรับกลุ่มที่ไม่ได้ติดตั้งเป็นมาตรฐาน) และการตั้งค่าใน php.ini ในบทที่ 3 นี้จะกล่าวถึงฟังก์ชันบางกลุ่มที ่ใช้ประโยชน์โดยทั่วไปและเป็นฟังก์ชัน มาตรฐานในภาษา PHP. และในตอนท้ายจะกล่าวถึงชื่อกลุ่มต่างๆ ของฟังก์ชันที่เป็นทางเลือก เพื่อให้ผู้ศึกษาได้ทราบว่ามีกลุ่มใดบ้างและเป็นแนวทางเพื ่อติดตามศึกษาได้จากคู ่มือภาษาของ PHP. เพิ่มเติมเมื่อจะต้องใช้งานฟังก์ชันดังกล่าว

p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

บทท 3ฟงกชนมาตรฐานของภาษา PHP

นอกเหนอจากหลกสำคญของภาษาทกลาวถงในบทท 2 แลว สวนประกอบทสำคญอกสวนหนงในการสราง web program หรอโปรแกรมทวไป คอการใชฟงกชนทเตรยมไวในภาษานนๆ (predefined หรอ standard function) มทงฟงกชนทสามารถใชงานไดเปนมาตรฐาน และฟงกชนทตองนำเขาจากไลบราลซงเปนไฟลทรวมเอาฟงกชนทใชงานเปนเรองๆ หรอแยกเปนกลมตามหนาทของฟงกชน ซงเราอาจจะไดพบเหนคำวา API. หรอ Application Program Interface กคอกลมของฟงกชนทโปรแกรมระบบตางๆ เตรยมไวใหผเขยนโปรแกรมเรยกใชประโยชน หากเปนภาษาโปรแกรมแบบ Object Oriented Programming กจะมการเตรยม class เพอใชสราง object ทม method ทเทยบเทากบฟงกชน เพอให application ตางๆ สามารถนำมาใชประโยชนไดในลกษณะเดยวกน

สำหรบภาษา PHP มฟงกชนอยเปนจำนวนมากนบพนฟงกชน แบงออกเปนกลมฟงกชนทสนบสนนการดำเนนการในหลากหลายดาน เนองจากเปนภาษาทเปน opensource และ freeware ทำใหมผรวมกนสรางฟงกชนตางๆ และถกนำมาใชเปนมาตรฐานของ PHP อยมากมาย ฟงกชนจำนวนหนงสามารถใชงานกบ PHP engine ทตดตงไดทกระบบ แตบางกลมของฟงกชนจะตองถกตดตงและระบใน configuration file ของ PHP เนองจากเปนฟงกชนทอาจจะไมไดใชงานกนโดยทวไป แตกสามารถ download สวนประกอบทเรยกวา extension หรอสวนขยายของฟงกชนแตละกลม เพอนำมาตดตงไดตามลกษณะการใชงานทตองการ ซงใน manual ของ PHP. จะระบกลมของฟงกชนตางๆ ทม ชอ extension module ทตองตดตง (สำหรบกลมทไมไดตดตงเปนมาตรฐาน) และการตงคาใน php.ini

ในบทท 3 นจะกลาวถงฟงกชนบางกลมทใชประโยชนโดยทวไปและเปนฟงกชนมาตรฐานในภาษา PHP. และในตอนทายจะกลาวถงชอกลมตางๆ ของฟงกชนทเปนทางเลอก เพอใหผศกษาไดทราบวามกลมใดบางและเปนแนวทางเพอตดตามศกษาไดจากคมอภาษาของ PHP. เพมเตมเมอจะตองใชงานฟงกชนดงกลาว

Page 2: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

92929292

1 ฟงกชนทางคณตศาสตรฟงกชนทางคณตศาสตรเปนฟงกชนเกยวของกบการคำนวณตวเลข ทงการคำนวณตวเลข

ทวไป เกยวกบการปดเศษเลข ฟงกชนทางตรโกณ การสมตวเลข การแปลงตวเลขระหวางฐานและหนวยทใชบอย การทดสอบชนดขอมล ซงฟงกชนในกลมนเปนฟงกชนมาตรฐานทไมตองตดตงโมดลเพมเตม (extension module) พเศษใดๆ

กลมฟงกชนทางคณตศาสตร มฟงกชนตางๆ ทสำคญแยกตามกลมยอยดงน1 1) ฟงกชนคณตศาสตรทวไป

number abs (x) ใหคา Absolute value คอคาทไมคดเครองหมายบวกลบ เชน abs (345) ใหขอมลตวเลข 345,abs(-8023.50) ใหผลลพธตวเลข 8023.50 เปนตน

float exp (x) คำนวณคา exponential ของ e (Natural logarithm base) ex

float log10 (x) คำนวณคา logarithm ฐาน 10

float log (x) คำนวณคา Natural logarithm loge (x) หรอ ln x

number max (x1,x2) ใหคาขอมลทสงสดระหวาง x1 กบ x2 เชน max (50.4,-35) ไดผลลพธ 50.4 หรอ max (-380, -550) จะใหผลลพธ -380 เปนตน

number min (x1,x2) ใหคาขอมลทนอยทสดระหวาง x1 กบ x2

float fmod (x1,x2) ใหคาเศษจากการหารเลขทศนยม เชน fmod(3.5,2) ไดผลเปน 1.5 (3.5 หารดวย 2 ไดผลจำนวนเตมเปน 1 และเหลอเศษ 1.5)

float hypot (x,y) คำนวณคา Square root ของ (x2 + y2)

float pi ( ) ใหคา pi (3.1415926535898)

float pow (x,y) คำนวณคายกกำลง x y

float sqrt (x) คำนวณคาถอดรากท 2 (square root) ของ x

ฟงกชนเหลานมกจะใชกบสตรการคำนวณตวเลขเพอการวเคราะหตางๆ เชน การคำนวณหาแนวโนม คาทางสถต ทงดานวทยาศาสตร ดานการเงน ตวอยางของการใชฟงกชน min, max เชน การหกลดหยอนภาษ ทระบวาใหหกไดตามจรงแตไมเกนจำนวนทระบ หรอ ใหเสยภาษเหมาจาย 0.05% หรอทำการหกลดหยอนแลวคดภาษตามอตราทระบ แลวแตอยางใดจะมากกวากน ฯลฯ เปนตน$insureDeduc = min ($insurance,50000.00);

1 2) ฟงกชนเกยวกบการปดเศษตวเลข• float ceil (float x)

ปดเศษเลขทศนยมใหเปนเลขจำนวนเตมโดยการปดเศษขนหากมเลขหลงจดทศนยม (ปดเศษเลขโดยเพมคาขนใหเปนเลขจำนวนเตมจำนวนถดไป) ผลลพธไดเลข floating point ทมเศษทศนยมเปน x.0 เชน

ceil (4.01) ไดผลลพธ 5.0

ceil (3.98) ไดรบผลลพธ 4.0

ceil (-3.98) ไดรบผลลพธ -3.0

ceil (-4.01) ไดผลลพธ -4.0 เปนตน

• float floor (float x)

ปดเศษเลขทศนยมใหเปนเลขจำนวนเตมโดยการปดเศษลงหากมเลขหลงจดทศนยม (ปดเศษเลขโดยลดคาลงใหเปนเลขจำนวนเตมจำนวนถดไป) ผลลพธไดเลข floating point ทมเศษทศนยมเปน x.0 เชน

floor (4.99) ไดผลลพธ 4.0

floor (5.1) ไดผลลพธ 5.0

floor (5.0) ไดผลลพธ 5.0

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 3: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

93

floor (-5.1) ไดผลลพธ -6.0

floor (-4.99) ไดผลลพธ -5.0

• float round (float x)

ปดเศษเลขทศนยมโดยปดขนหรอลงดจากคาทศนยม 0.5 ผลลพธไดเลข floating point ทมเศษทศนยมเปน x.0 เชน

round (4.4999) ไดผลลพธ 4.0

round (4.5) ไดผลลพธ 5.0

round (-4.4999) ไดผลลพธ -4.0

round (-4.5) ไดผลลพธ -5.0

ฟงกชนเหลานจะทำการปดเศษทศนยมใหเหลอแตจำนวนเตมแตยงคงไดรบผลเปนตวเลขชนด floating point เนองจากหากใช integer อาจไมสามารถรบขอมลขนาดใหญทมาจากการปดเศษของ float ได หากตองการใหปดตวเลขตามจำนวนหนวยของหลกเลขทตองการ เชน ปดเลขทศนยมหลกท 3 (ปดใหเหลอเศษเพยง 2 หลก) ตย. 45.1225 ปดเศษทงเปน 45.12 หรอปดขนเปน 45.13 ทำไดโดย ceil ($x/0.01)*0.01 หากตองการปดเศษใหเหลอเลขหลงจด 4 หลกกจะเปน ceil ($x/0.0001)*0.0001 หากตองการปดเลขจำนวนเตมใหเปนหลกรอย เชน 35640 หากปดขนจะเปน 35700 สามารถใช expression ceil($x/100)*100 ซงหากจะเขยนเปน expression แบบทวไปสรางเปน function ใหมไดเปนfunction ceil2digit ($x,$digit=0) { $c = pow(10,$digit); return ceil($x/$c) * $c;}

โดยทมการสง argument 2 ตวไดแก $x เปนคาทตองการปดเลข และ $digit จำนวนหลกเลขทตองการ เชนหากจะปดเลขใหเปนหลกรอยคอปดเลขจำนวนเตมทมเลข 0 ตรงทาย 2 หลก จะสง $digit เปน 2 หากจะปดเปนหลกหมนคอปดเลขจำนวนเตมขน 4 หลก กำหนด $digit เปน 4 ในกรณปดเศษเศษทศนยมจะกำหนดจำนวนหลกเปนเลขลบ เชน หากตองการปดเลขเศษทศนยมใหเหลอ 2 หลก กำหนด $digit เปน -2 หากจะปดเลขเศษทศนยมใหเหลอ 5 หลก กำหนด $digit เปน -5 เปนตน ตวอยางการเรยกใชฟงกชน ceil2digit( ) แสดงไดดงน<? echo ceil2digit(3456,2); // 3500 echo ceil2digit(1401,2); // 1500 echo ceil2digit(1000001,5); // 1100000 echo ceil2digit(356.136589,-4); //356.1366?>

1 3) ฟงกชนตรโกณfloat acos (x) Arc cosine คอ cos-1 (x)

float acosh (x) Inverse hyperbolic cosine ของ xfloat asin (x) Arc sine ของ x, sine-1 (x)

float asinh (x) Inverse hyperbolic sine ของ xfloat atan2 (x,1x2) arc tangent of สองคาfloat atan (x) Arc tangent ของ x, tan-1 (x)

float atanh (x) Inverse hyperbolic tangent ของ xfloat cos (x) Cosine ของ x, cos(x)

float cosh (x) Hyperbolic cosine ของ xfloat sin (x) Sine ของ x, sine (x)

WEB PROGRAMMING Using PHP. and MySQL.

Page 4: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

94949494

float sinh (x) Hyperbolic sine ของ xfloat tan (x) Tangent ของ xfloat tanh (x) Hyperbolic tangent ของ x

ฟงกชนในกลมนมกจะใชกบการคำนวณทางวทยาศาสตร วศวกรรม เปนหลก เชนในการออกแบบโครงสรางทางวศวกรรม การคำนวณทางฟสกส ฯลฯ เปนตน สวนในการใชงานดานทวไปมกไมไดใชประโยชนจากฟงกชนเหลาน คา argument ทสงใหแกฟงกชนตรโกณเปนขอมลตวเลข floating point และจะใหผลลพธเปน floating point เชนกน

1 4) ฟงกชนการแปลงเลข-หนวยเปนฟงกชนทใชแปลงตวเลขหรอขอความแสดงตวเลขฐานหนง ไปเปนขอความหรอตวเลขฐาน

อนๆ มทงฟงกชนแปลงฐานใดๆ และฟงกชนทกำหนดเฉพาะฐาน และยงมฟงกชนททำการแปลงหนวยของมมดวย ฟงกชนในกลมนประกอบดวยฟงกชนตางๆ ดงนstring base_convert (string data, int frombase, int tobase)

แปลงขอความเลขฐานหนงไปเปนอกฐานหนงโดยระบฐานของเลขตนทางและผลลพธ ตวอยางเชน$accessBit = base_convert ("744",8,2);เปนการแปลงขอความจากเลขฐาน 8 เปนเลขฐานสอง เปนตน

int bindec ( string binary_string) แปลงขอความแสดงเลขฐานสองใหเปนเลขจำนวนเตมฐานสบ

string decbin ( int number) แปลงตวเลขจำนวนเตมใหเปนขอความแสดงเลขฐานสองstring dechex ( int number) แปลงตวเลขจำนวนเตมใหเปนขอความแสดงเลขฐานสบหกstring decoct ( int number) แปลงตวเลขจำนวนเตมใหเปนขอความแสดงเลขฐานแปดfloat deg2rad ( float number) แปลงตวเลขมมทมหนวยเปนองศาใหเปนหนวย radian

int hexdec ( string hex_string) แปลงขอความแสดงเลขฐานสบหกใหเปนตวเลขจำนวนเตมint octdec ( string hex_string) แปลงขอความแสดงเลขฐานแปดใหเปนตวเลขจำนวนเตมfloat rad2deg ( float number) แปลงตวเลขมมทมหนวยเปนเรเดยนใหเปนหนวยองศา

ตวอยางเชน การสรางฟงกชนเพอสราง color # ทกำหนดสใหแก HTML tag เชน <body bgcolor="#03203A"> ซงตองการเลขฐานสบหก จากคาตวเลขสแตละสเปนเลข 0-255 แสดงดง Listing 3.1-1

Listing 3.1-1 colorId-exam.php1 <?2 function colorID255($r,$g,$b){3 $r = min($r,255);4 $g = min($g,255);5 $b = min($b,255); 6 return "#" .7 str_pad(dechex($r),2,"0",STR_PAD_LEFT) .8 str_pad(dechex($g),2,"0",STR_PAD_LEFT) . 9 str_pad(dechex($b),2,"0",STR_PAD_LEFT);10 }11 echo colorID255(200,40,130);12 ?>

ตวอยางนฟงกชน colorID255 รบ argument 3 ตวเปนคาส integer สำหรบแมส red, green และ blue จากตวแปร $r, $g และ $b ในตวอยางนใชฟงกชน 3 ฟงกชนไดแก min( ) , dexhex( ) และ str_pad( ) โดย คำสงบรรทดท 3-5 ใชเพอไมใหคาในตวแปร $4,$g,$b เกน 255 เนองจากฟงกชน min( ) จะใหผลจากคา argument ทมคานอยกวาดงนนหากคาในตวแปรเกน 255 จะใหผลลพธเปน 255 แตหากไมเกนจะใหคาเดม ในบรรทดท 7-9 จะทำการแปลงจากคาตวเลขในตวแปรใหกลายเปนขอความทแสดงเลขฐานสบหกโดยใชฟงกชน dechex( ) และเตมเลข 0 นำหนาใหครบ 2 หลกโดยใชฟงกชน str_pad( )

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 5: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

95

1 5) ฟงกชนสมตวเลขในภาษา PHP มการใชฟงกชนเกยวกบการสมตวเลข 2 แบบไดแก แบบ libc ซงจะใชฟงกชน

rand ( ) และการใชฟงกชนสมดวยเทคนค Mersenne Twister ทสรางคาสมไดเรวกวา libc ถง 4 เทา โดยใชฟงกชน mt_rand ( ) ทงสองฟงกชนจะใหคาสมเปนเลขจำนวนเตมทกำหนดชวงขอมลได

หากโปรแกรมใดตองการสรางคาสม ควรจะใชคำสงเพอเรมตนการสรางตวเลขสำหรบการสม โดยใชฟงกชน Seed random number generator ในตอนตนของ page คำสงการเรมการสรางตวเลขสมนใชเพยงครงเดยวในแตละ page แลวสามารถใชฟงกชน rand( ) ไดหลายครง หากไมใชคำสงเรมตนการสรางคาสมจะทำใหตวเลขสมเมอโปรแกรมทำงานแตละรอบไดคาทซำกน ฟงกชนทใชเรมการสรางคาสมคอ srand( ) และ mt_srand( )

การใช srand หรอ mt_srand ตองการ parameter เปนตวเลขเพอกำหนดคาตงตนของการสม ซงเทคนคโดยทวไปเราจะใชคาทไมเหมอนกนในแตละครงทเพจถกเรยกใหทำงาน ซงมกจะดงเอาเวลา timestamp ในขณะทเพจถกเรยกใชงาน ทมความละเอยดสง ซงมฟงกชนสนบสนนคอ microtime( ) นำมาใชเปนคาเรมตน ซงมกจะใช code ดงนsrand((float)microtime() * 1000000);

ใน PHP version 4.2.0 เปนตนไปไมจำเปนตองเขยนคำสง srand หรอ mt_srand เนองจาก PHP engine จะดำเนนการเองโดยอตโนมต

รายการฟงกชนเกยวกบการสมตวเลขแสดงในตารางตอไปนint mt_getrandmax ( ) ใหคาสมสงสงสดทสามารถทำไดvoid mt_srand ( ) เรมการสรางคาสมในโปรแกรม

int mt_rand ( [int min, int max])

สรางตวเลขสมโดยสามารถกำหนดคาสงสด ตำสดได หากไมกำหนดจะใหคาระหวาง 0 ถง คาสงสดทสามารถทำได (ใชฟงกชน getrandmax หากตองการทราบคาสงสดทสามารถทำได)

int getrandmax ( ) ใหคาสมสงสงสดทสามารถทำไดint rand ( ) สรางตวเลขสมvoid srand ( ) เรมการสรางคาสมในโปรแกรม

ฟงกชนเกยวกบการสรางตวเลขสม สามารถนำไปใชประโยชนไดเชน การสมรายการขอมลขนมาแสดง ซงขอมลนนอาจจะเปนบทความทนาสนใจ รปภาพ banner โฆษณา ฯลฯ เปนตน (ตวอยางในหวขอ 5.2 บทท 5) และนอกจากนยงอาจใชฟงกชนการสมเพอสรางขอมลสำหรบการทดสอบขน อาจเปนขอมลทสรางในระหวางการทดสอบโปรแกรมหรอสรางขอมลตวอยางเกบลงในไฟลขอมลหรอฐานขอมลสำหรบใชทดสอบ หรออาจสมเพอสรางสภาวะจำลองการทำงาน เชนสมเวลาทจะมขอมลลำดบถดไปเขามา เปนตน

ตวอยางแสดงการสมขอมลตวเลขทอยระหวาง 25-100 จำนวน 50 คา แสดงผลโดยมเครองหมาย comma คน<?mt_srand();for ($i=0; $i<50; $i++) { echo $comma, mt_rand (25,100); $comma = ', '; }?>

ดตวอยางการใชฟงกชนสมตวเลขเพมเตมในบทท 5

1 6) ฟงกชนทดสอบนพจนตวเลขฟงกชนเหลานจะทำการตรวจสอบขอมลทสงมาใน argument วาไดเปนขอมลทสามารถเกบ

ผลเปนตวเลขหรอไมจะรบขอมลใน argument เปนชนดตวเลข และใหผลลพธเปน Boolean แสดงผลลพธจากการตรวจสอบเปน true หากตรงเงอนไข หากไมตรงจะได false

• boolean is_finite (float val)

WEB PROGRAMMING Using PHP. and MySQL.

Page 6: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

96969696

ทดสอบวาเปน expression ตวเลขทใหคาทสามารถเกบขอมลแบบ double ได (finite) หรอไม• boolean is_infinite (float val)

ทดสอบวาเปน expression ใหผลเปนตวเลขทใหคาตวเลขทไมสามารถเกบคาแบบ double ไดทงคาบวกหรอลบหรอไม คอเปนคาทมขนาดใหญมากเกนความสามารถของ php ทจะเกบได• boolean is_nan (float val)

ทดสอบวาเปน expression ทไดผลเปนตวเลขหรอไม หากไมเปนชนดตวเลข (is not a number) อาจเปนผลจากการใช expression ทไมสามารถใหผลเปนคาตวเลขไดถกตอง จะใหผลลพธเปน true แตหากเปนขอมลตวเลขจะไดผลลพธเปน false เชน is_nan( acos(1.01)) จะไดเปน true (ปกตคา cosine จะมคาไมเกน 1 ดงนน arc cosine ของ 1.01 ไมสามารถหาคาได

ฟงกชนเหลานมกจะใชเพอตรวจสอบความถกตองจากการคำนวณตวเลขของ expression วาสามารถใหผลลพธทเปนตวเลขทถกตองหรอไม ซงในการคำนวณดวย expression ทเกดผลลพธเปนคาตวเลขทศนยมทมขนาดใหญมากๆ หรอมขนาดเลกมากๆ จนการเกบขอมลแบบ double ซงถอเปนวธเกบขอมลทไดขอมลขนาดใหญมากทสดของภาษา PHP ไมสามารถแทนคาดงกลาวได หากนำผลลพธจาก expression นนไปใชกไดไดผลทผดพลาดไป จงตองมการตรวจสอบกอนวาไดผลลพธทถกตอง

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 7: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

97

2 ฟงกชนเกยวกบขอมล Arrayภาษา PHP ไดเตรยมฟงกชนเกยวกบการเกบขอมลและการประมวลผลใน array ไวเปนจำนวน

มากสามารถทำการประมวลผลไดอยางครบถวนทงการคนหา การจดเรยง การคดแยก การนำขอมลเขาใน array การคำนวณใน array การใช array เปนโครงสรางขอมล stack ฯลฯ เปนตน

รายชอของฟงกชนทเกยวของกบ array แบงเปนกลมตางๆ แสดงไดดงน

2 1) ฟงกชนเกยวกบการกำหนด การเปลยนแปลงขอมลใน array

• array array ( )

สรางขอมล array ใหมกำหนดใหตวแปร ตวอยางการใชอยในหวขอ 2.8 ในบทท 2

• array array_rand (array input [, int num_req])

ทำการสมเลอกคา key (index) จาก array เปนจำนวนทตองการ ใหผลลพธเปน array ของ key/index ทสมไดมจำนวน element ตามทระบใน argument num_req หากไมระบnum_req จะสมคา index/key มาใหเพยง 1 ตว

เชน<?$input = array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");echo $input[array_rand($input)],"<br>\n";$rand_keys = array_rand($input, 2);echo $input[$rand_keys[0]] ,"<br>\n";echo $input[$rand_keys[1]] ,"<br>\n";print_r ($rand_keys);?>

• array array_fill ( int start_index, int num, mixed value)

ใหผลเปน array ทม index เรมตงแต start_index มจำนวน element เทากบจำนวนทระบใน num ใหทกๆ element มขอมลเปนคาทระบใน value ตวอยางเชน

$a = array_fill (3, 5, "None");

จะไดตวแปร array $a ทม element ไดแก

Array ( [3]=>"None", [4]=>"None", [5]=>"None", [6]=>"None", [7]=>"None" )

• int extract ( array var_array [, int extract_type [, string prefix]])

สรางตวแปรจาก associative array โดยใช key ของ element เปนชอตวแปรและคาใน element เปนคาของตวแปรทสรางขน สามารถกำหนดทางเลอกของการสรางตวแปรโดยระบ extract_type และกำหนดคำนำหนาชอตวแปรดวย prefix ได ตวอยางเชน

$ar = array('a'=>100,'b'=>34,'c'=>69,'d'=>35,'e'=>20);

extract ($ar); จะสรางตวแปรขน 5 ตวไดแก $a, $b, $c, $d, $e มขอมลเปน 100, 34, 69, 35, 20 ตามลำดบ

ทางเลอกของการสรางตวแปรในฟงกชน extract (extract_type) สามารถใชชอ constant ไดดงน

o EXTR_OVERWRITE หากมตวแปรชอทซำอยแลวใหทบตวแปรนนดวยขอมลท extract จาก array

o EXTR_SKIP หากมตวแปรชอทซำอยแลวใหขามตวแปรนนไมตองเปลยนแปลงคา

WEB PROGRAMMING Using PHP. and MySQL.

Page 8: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

98989898

o EXTR_PREFIX_SAME หากมตวแปรชอทซำอยแลวใหนำหนาชอตวแปรใหมทซำดวย prefix

o EXTR_PREFIX_ALL ใหสรางตวแปรทงหมดจาก array โดยใส prefix นำหนาชอตวแปรทกตว

o EXTR_PREFIX_INVALID ใหสรางตวแปรโดยใช prefix นำหนาชอเฉพาะชอทผดวธการตงชอเทานน สวนตวแปรท key ตรงตามวธตงชออยแลวไมตองนำหนาชอตวแปรใหมดวย prefix

o EXTR_IF_EXISTS ใหทบตวแปรทมอยแลวเฉพาะตวแปรทอยใน symbol table แลวเทานน

o EXTR_PREFIX_IF_EXISTS ใหสรางตวแปรนำหนาชอดวย prefix หากชอตวแปรนนมอยแลวใน symbol table

o EXTR_REFS ทำการ extracts ตวแปรแบบ references คออางองไปยงขอมลใน array ดงนนตวแปรทเกดขนใหมจะชไปยงขอมลเดยวกบ element ใน array สามารถใช type นรวมกบวธอนไดโดยการ OR เชน EXTR_SKIP OR EXTR_REFSคา default ของ extract_type คอ EXTR_OVERWRITE

ผลลพธจากฟงกชนนจะใหตวเลขจำนวนเตมแสดงจำนวนตวแปรทสรางขนไดสำเรจ

• array compact ( mixed varname [, mixed varname[,...]])

เปนฟงกชนททำงานตรงขามกบ extract คอจะรวมเอาตวแปรตางๆ เขามาเปน array และใหผลลพธเปน array ทรวมตวแปรตางๆ เขามา โดย key ของ array ไดมาจากชอตวแปร และคาทเกบใน array element คอคาขอมลทมาจากตวแปร การสงชอตวแปรสามารถใชเปน string แสดงชอตวแปร หรอสงเปน array ทบรรจ string ชอของตวแปรกได เชน

$uName = "James Bond";$uFavColor = "red";$lastAccess = date( "r");$my_env = compact ('uName','uFavColor','lastAccess');or$env_vars = array('uName','uFavColor','lastAccess');$my_env = compace($env_vars);

จากตวอยางขางตนไมวาจะใชฟงกชน compact สงชอตวแปรแตละตวใน argument หรอสง array ทบรรจชอตวแปร กจะไดรบผลเหมอนกน คอได array ทม 3 elements ไดแก

$my_env ['uName'] => "James Bond"

$my_env['uFavColor'] => "red" และ$my_env['lastAccess'] => ขอความวนทและเวลาทไดจากตวแปร $lastAccess

2 2) ฟงกชนเกยวกบ index, internal pointer ของ array

• array array_keys ( array ary [, mixed search_value])

ใหผลลพธเปน array ของ key ทมาจาก ary หากมการระบ search_value จะใหผลเฉพาะ key ของ element ทมคาขอมล (value) ตรงกบ search_value เทานน เชน$a1 = array(0 => 100, "color" => "red");$a2 = array_keys($a1); // $b1 = array("blue", "red", "green", "blue", "blue");$b2 = array_keys($b1, "blue"); $c1 = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large"));$c2 = array_keys($c1);

ในตวอยางขางตนนจะไดผลลพธไดแก$a2 = Array([0] => 0, [1] => color)

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 9: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

99

$b2 = Array([0] => 0, [1] => 3, [2] => 4)

$c2 = Array([0] => color, [1] => size)

ตวแปร array ในภาษา PHP แตละตวจะม internal pointer เพอใชชตำแหนง element โดยอตโนมตเมอไมมการระบคา key หรอ index (เชน $a[ ] = 20) เมอมการใชงาน internal pointer เพออางถง element แลว internal pointer จะเลอนไปช element ถดไปโดยอตโนมต

ในการเขยนโปรแกรมสามารถใชฟงกชนเพอควบคมหรอใชงาน internal pointer ของตวแปร array แตละตวได โดยมฟงกชนทเกยวของดงน ดงน

• mixed key(array ary)

ใหคา key ของตวชภายใน array ทชอยปจจบน

• mixed next(array ary)

เลอนตำแหนงตวชภายในของ array $ary (internal pointer )ไปยง element ถดไป และใหผลลพธเปนคาทเกบใน element ทถกชใหม

• mixed prev(array ary)

เลอนตำแหนงตวชภายในของ array $ary (internal pointer ) กลบไปยง element กอนหนา และใหผลลพธเปนคาทเกบใน element ทถกช

• mixed end (array ary)

ตงตำแหนงตวชภายในของ array $ary (internal pointer )ไปยง element สดทาย และใหผลลพธเปนคาทเกบใน element สดทายนน

• mixed reset (array ary)

ตงตำแหนงตวชภายในของ array (internal pointer )ไปยง element แรกสด และใหผลลพธเปนคาทเกบใน element แรกนน

• array each (array ary)

ใหผลลพธเปน array 4 elements ทใหขอมลเกยวกบ element ปจจบนทถกชดวย pointer ของ array ary ซง element ทงสของผลลพธไดแก [0][1]['key'] และ ['value'] โดย element [0] และ ['key'] จะมขอมลจาก index/key ของ array ary สวน element [1] และ ['value'] จะมขอมลทมาจากขอมลใน array ary ตวอยางเชน

<? $prod = array('10023''=>'Cracker', '56712'=>'Apple', '84678'=>'Scooby');$elem = each($prod);?>

จะไดตวแปร $elem เปน array ทมขอมลไดแก (ตวชใน array จะเรมชท element แรก)

[0] => '10023', [1] =>'Cracker', [key]=>'10023', [value] =>'Cracker'

WEB PROGRAMMING Using PHP. and MySQL.

Page 10: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

100100100100

ฟงกชนนสามารถใชแทน foreach เพอเขาถงแตละ element ใน array ไดโดยใชกบ while เชน

<?php$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit);while (list($key, $val) = each($fruit)) { echo "$key => $val\n";}?>

2 3) การคนหาและเลอกขอมลใน array

• array array_filter ( array input [, callback callback])

ฟงกชน array_filter จะใหผลเปน array ทกรองเอาเฉพาะขอมลใน element ทตรงตามเงอนไขทกำหนดโดยการใชฟงกชนทสรางขน (callback function) ซงจะยงคง key เดมไวดวย การสราง callback function จะตองรบคาจาก value ของแตละ element ใน array เขาใน argument เพอนำไปตรวจสอบและใหผลเปน boolean โดย element ทจะถกเลอกไปเปนผลลพธเปน element ทใหผลลพธเปน true เทานน ตวอยางเชน หากตองการใหกรองเอาเฉพาะ element ทมขอความทมความยาว 3 อกขระ เทานน สามารถสรางฟงกชนตรวจสอบและใชฟงกชน array_filter ( ) ไดดงน<?function acpt_str($str) { $len = strlen($str); return ($len==3); }$a = array("somsri","eak","surapont","meta","jim","nut");$b = array_filter($a,"acpt_str");print_r($b);?>

ผลลพธจะได array $b ทมขอมลดงนArray ( [1] => eak [4] => jim [5] => nut )

• bool in_array ( mixed needle, array haystack [, bool strict])

ฟงกชน in_array( ) ใชตรวจสอบวามขอมลทระบตรงกบขอมลใน element ใดของ array หรอไม โดยจะใหผลเปน Boolean แสดงวาพบหรอไม argument ของฟงกชนนไดแก

o needle คอขอมลทตองการคนหาเปนขอมลชนดใดๆo haystack คอ array ททำการคนหาขอมลo stict เปน Boolean ระบวาตองการตรวจสอบขอมลทตรงชนดกนดวยหรอไม (เนองจาก

ปกต PHP จะแปลงชนดขอมลใหเอง) หากเปน true คอชนดตองตรงกนดวยตวอยางเชน

in_array(30,array('abc','30years','beatle'))

ใหผล true เนองจาก 30 เมอเปรยบเทยบกบขอมล '30years' PHP จะแปลงใหเปนชนด integer ซงได 30 เชนกนแตหากกำหนด strict เปน true เชนin_array(30,array('abc','30years','beatle'),true)

จะใหผล false เนองจาก 30 และ '30years' มชนดขอมลตางกนหากขอมลทตองการคนหาเปนขอความจะเปรยบเทยบแบบ case sensitive คอถออกษรตว

ใหญเลกมความตางกน เชน

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 11: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

101

in_array ('Abc', array('abc','30years','beatle'))

จะใหผล false เนองจาก 'Abc' และ 'abc' มตว A และ a แตกตางกน

• mixed array_search ( mixed needle, array haystack [, bool strict])

ฟงกชน array_search ทำหนาทตรวจสอบวามขอมลตรงกบ element ใดๆ ใน array หรอไม เชนเดยวกนกบฟงกชน in_array( ) แตจะใหผลลพธเปนคา key ของ element ทพบ หรอใหคา false หากไมพบ (ดรายละเอยดของ argument ตางๆ ในฟงกชน in_array( ) ทผานมาแลว)

• bool array_key_exists ( mixed key, array ary)

เปนฟงกชนททำการตรวจสอบวาใน array ary ม element ทมคา key ตามทระบใน argument key หรอไม จะใหผลเปน Boolean แสดงวาพบใหคา true หรอไมพบใหคา false

2 4) การจดเรยงขอมลใน array

การจดเรยงลำดบขอมลใน array มการจดเรยงลำดบจากขอมล 2 สวนไดแก จากขอมลทเกบในแตละ element หรอจาก value และการเรยงลำดบจาก key/index ทเปนตวช element ตางๆ ซงสามารถใชเปนขอความได (คอ associative array) และการจดเรยงลำดบยงอาจจะจดเรยงจากขอมลนอยไปหามาก (ascending) หรอมากไปหานอย (descending) หรอเรยกวา reverse order หากเปนขอความภาษาองกฤษยงอาจมการเรยงโดยเปนลกษณะ case sensitive หรอ case insensitive คอแยกความแตกตางระหวางอกษรตวใหญ (A-Z) กบตวเลก (a-z) หรอไม กรณ case sensitive ถอวาอกษร a กบ A ตางกน แตหากเปน case insensitive ถอวาอกษร a กบ A เหมอนกน

ฟงกชนการเรยงลำดบขอมลใน array ของภาษา PHP มฟงกชนตางๆ ไดแก sort ( ), rsort( ), arsort( ), asort( )

• bool sort ( array $ary [, int sort_flags])

ฟงกชน sort( ) เรยงลำดบขอมลใน array จากนอยไปมาก สามารถกำหนดใหเรยงลำดบแบบตวเลขหรอแบบขอความได ฟงกชนนจะจด index ใหใหมโดยจะยกเลก key/index เดม มลกษณะการจดเรยงขอความแบบ case sensitive คอถออกษรตวใหญและตวเลกแตกตางกน

ผลลพธจากฟงกชนนนอกจากจะจดเรยงขอมลทอยใน array $ary แลว ยงใหผลลพธเปน true หากสามารถจดเรยงไดสำเรจ หากไมสามารถจดเรยงไดจะใหผลเปน false

sort_flags เปนการกำหนดวธการจดเรยงม 3 วธไดแก

• SORT_REGULAR – เรยงตามชนดขอมล (เปนคา default)

• SORT_NUMERIC – เรยงแบบตวเลข• SORT_STRING – เรยงแบบขอความตวอยางเชน

$a = array('cameroon', 'bolivia', 'Norway', 'finland', 'finland/2', 'finland18');sort($a);

ผลลพธตวแปร $a หลงจากการจดเรยงจะไดArray([0]=>Norway, [1]=>bolivia, [2]=>cameroon, [3]=>finland, [4]=>finland18, [5]=>finland2 )

ตวอยางการเรยงลำดบขอมลตวเลข$a = array(38,198,26,57,9,'');sort($a);sort($a, SORT_NUMERIC);sort($a, SORT_STRING);

WEB PROGRAMMING Using PHP. and MySQL.

Page 12: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

102102102102

ผลลพธตวแปร $a หลงจากการจดเรยงโดยไมกำหนด sort_flags หรอกำหนดเปน SORT_NUMERIC จะไดArray ( [0]=>'', [1]=>9, [2]=>26, [3]=>38, [4]=>57, [5]=>198 )

แตหากกำหนด sort_flags เปน SORT_STRING จะไดผลลพธเปนArray ( [0]=>'', [1]=>198, [2]=>26, [3]=>38, [4]=>57, [5]=>9 )

ฟงกชน sort( ) จะทำการยกเลกและกำหนดคา key/index ใหมดงตวอยางน$a = array('ca'=>'cameroon','bo'=>'bolivia','no'=>'norway','fi'=>'finland');sort($a);

ผลจากการจดเรยงจะได array $a ใหมเปนArray ([0]=>bolivia, [1]=>cameroon, [2]=>finland, [3]=>norway )

• bool rsort ( array $ary [, int sort_flags])

ฟงกชน rsort( ) เปนฟงกชนเรยงลำดบเชนเดยวกบ sort( ) คอจะเรยงลำดบขอมล (value) ใน array โดยจะกำหนด key/index ใหแตละ element ใหมตามลำดบทจดเรยงขอมล ขอมลขอความทจดเรยงจะถอวาอกษรใหญกบเลกเปนคนละตว (case sensitive) สามารถกำหนดวธจดเรยงแบบตวเลขหรอขอความได แตแตกตางกนคอจะจดเรยงจากมากไปหานอย (reverse order)

ตวอยางการเรยงลำดบขอมลตวเลข$a = array(38,198,26,57,9,'');rsort($a);

ผลจากการจดเรยงดวย rsort( ) จะได array $a ใหมเปนArray ([0]=>198, [1]=>57, [2]=>38, [3]=>26, [4]=>9, [5] =>'')

• bool asort ( array $ary [, int sort_flags])

ฟงกชน asort( ) เปนฟงกชนเรยงลำดบเชนเดยวกบ sort( ) คอจะเรยงลำดบขอมล (value) ใน array ขอมลขอความทจดเรยงจะถอวาอกษรใหญกบเลกเปนคนละตว (case sensitive) สามารถกำหนดวธจดเรยงแบบตวเลขหรอขอความได จะจดเรยงจากนอยไปหามาก แตมความแตกตางกนคอจะคงคา key/index ทสมพนธกบแตละ element เดมไว

ตวอยางเชน

$a = array('ca'=>'cameroon','bo'=>'bolivia','no'=>'norway','fi'=>'finland');asort($a);

ผลจากการจดเรยงจะได array $a ใหมดวย asort( ) จะไดเปนArray ( [bo] => bolivia [ca] => cameroon [fi] => finland [no] => norway )

• bool arsort ( array $ary [, int sort_flags])

ฟงกชน arsort( ) เปนฟงกชนเรยงลำดบทคงคา key/index ทสมพนธกบแตละ element เดมไว เชนเดยวกบ asort( ) แตจะเรยงลำดบจากมากไปหานอย (reverse order)

การเรยงลำดบขอมลใน array โดยใหเรยงลำดบตามคาของ key/index ม 2 ฟงกชน ไดแก ksort( ) และ krsort( ) ทงสองฟงกชนจะจดเรยงลำดบโดยใช key ทงทเปนตวเลข (numeric key) หรอขอความ (associative array) โดยถอ case sensitive ซง ksort( ) จะจดเรยงจากนอยไปมาก

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 13: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

103

สวน krsort( ) จะจดเรยงจากคา key มากไปนอย และสามารถกำหนด sort_flags ไดเชนเดยวกบฟงกชน sort( )

• bool ksort ( array $ary [, int sort_flags])

• bool krsort ( array $ary [, int sort_flags])

การจดเรยงโดยทวไปจะจดเรยงลำดบตามรหสของอกขระทเปน ASCII code แมแตขอความทมลำดบตวเลขตอทาย เชน 'prod1', 'prod16', 'prod2', 'prod10'จะถกเรยงลำดบเปน 'prod1', 'prod10', 'prod16', 'prod2' เนองจากอกขระเลข 2 มคารหสมากกวาเลข 1 แตในบางครงการเรยงลำดบลกษณะทมตวเลขผสมอยเรามกตองการเรยงลำดบโดยดคาของตวเลขเปนสำคญดวย เชน ตวอยางกอนหนาตองการใหเรยงลำดบเปน 'prod1', 'prod2', 'prod10', 'prod16' ตามลำดบเชนน จะตองใชการเรยงลกษณะทเรยกวา natural order ซงใน PHP มฟงกชน 2 ฟงกชนไดแก natcasesort( ) และ natsort( ) โดย natcasesort( ) จะเปน case insensitive คอถอวาตวอกษรภาษาองกฤษตวใหญและตวเลกเหมอนกน ฟงกชนทงสองจะคง key ทสมพนธกบคาทเกบขอมลไว

• void natcasesort (array $ary)

• void natsort (array $ary)

วธการจดเรยงขอมลมสวนสำคญคอการเปรยบเทยบขอมลไมวาจะเปนขอความหรอตวเลข ซงหากเปนขอความจะเปรยบเทยบรหสของแตละอกขระ โดยเรมจากซายไปขวาหากพบวามความแตกตางทตำแหนงใดกจะใหผลการเปรยบเทยบตำแหนงแรกทพบ ในขอมลบางประเภททกำหนดเองหรอแมแตเปนภาษาทไมใชภาษาองกฤษหากตองการเรยงลำดบขอมลตามความตองการทแตกตางไปจากการเปรยบเทยบขอความตามปกต หรอแมแตเปนตวเลขทไมไดเปรยบเทยบตามแบบปกตกตาม กสามารถกำหนดวธการเปรยบเทยบขอมลเพอใชในการจดเรยงเองไดเปนฟงกชนทสรางขนเอง (user defined function)

ในภาษา PHP. มฟงกชนการจดเรยงลำดบขอมลใน array ทสามารถกำหนดวธการจดเรยงขอมลเองได 3 ฟงกชนไดแก usort( ) เพอจดเรยงจากนอยไปมากโดยจดคา index/key ใหใหมตามผลการจดเรยงขอมลทได uasort ( ) จดเรยงโดยใหคง index/key คกบคาขอมลเดมไว และ uksort ( ) ใหจดเรยงตาม key โดยใช user define function ในการจดเรยงตาม key

การสรางฟงกชนเปรยบเทยบเพอการจดเรยงขอมลจะตองเปนฟงกชนทรบ argument 2 ตวเชน mycompare($a, $b) เพอนำมาเปรยบเทยบกนและใหผลลพธเปน integer เพอแสดงผลการเปรยบเทยบโดย ใหผลเปน 0 หากเปรยบเทยบไดเทากน ใหผลเปน คาบวกทมากกวา 0 หาก argument แรกคอ argument ตวซายมากกวา argument ตวทสองหรอ argument ทางขวาและใหผลเปนคานอยกวา 0 (คาลบ) หาก argument ตวแรกนอยกวา

ตวอยางการสรางฟงกชนทใชเปรยบเทยบหากตองการเปรยบเทยบคาตวเลขโดยไมคำนงถงเครองหมายบวกลบ (ใชเฉพาะคา) สามารถ

สรางฟงกชนเพอเปรยบเทยบไดดงนfunction unum_cmp ($n1, $n2) { $j1 = abs($n1); $j2 = abs($n2); $result = $j1 - $j2; return $result;}

รปแบบการใชฟงกชนจดเรยงทกำหนดวธเปรยบเทยบเอง• bool usort ( array $ary, callback cmp_function)

• bool uasort ( array $ary, callback cmp_function)

• bool uksort ( array $ary, callback cmp_function)

ตวอยางการใชฟงกชนเปรยบเทยบทสรางเองกบการจดเรยงขอมล$a = array(143,-50,30,80,20,-60);usort($a, "unum_cmp");

WEB PROGRAMMING Using PHP. and MySQL.

Page 14: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

104104104104

จะไดผลลพธตวแปร $a ทถกจดเรยงแลวเปนArray ([0]=>20, [1]=>30, [2]=>-50, [3]=>-60, [4]=>80, [5]=>143 )

ซงหากใชฟงกชนการจดเรยงธรรมดาคอ sort( ) จะไดผลลพธArray ([0]=>-60, [1]=>-50, [2]=>20, [3]=>30, [4]=>80, [5]=>143 )

2 5) การคำนวณ ประมวลผล• array array_count_values (array ary)

ใหผลลพธเปน array ทแสดงผลการนบจำนวน (ความถ) ของขอมลแตละคาทมใน array ary โดย key ของผลลพธไดจากคาขอมล และ value ทเกบจะเปนจำนวนครงทปรากฏใน ary เชน$a = array(1, "hello", 1, "world", "hello");$b = array_count_values($a);

ผลลพธของตวแปร $b จะได Array ( [1] => 2, [hello] => 2, [world] => 1)

• mixed array_sum ( array ary)

ฟงกชน array_sum ทำการคำนวณหาคาผลรวมของขอมลทเกบใน array ary หากม element ใน array ทมขอมลชนดอนทไมใชตวเลข จะพยายามแปลงใหเปนตวเลขตามวธการมาตรฐานของ PHP. ผลลพธจะไดเปนขอมลตวเลขจำนวนเตมหรอจดทศนยมขนกบขอมลใน array ary

2 6) การแยก-รวม array

• array array_merge ( array arry1, array arry2 [, array ...])

ฟงกชน array_merge( ) ใหผลลพธเปน array ทไดจากการรวม array ใน argument โดยเรมจาก element ใน array แรกแลวเรยงตอดวย array ตอๆ ไป หากม key/index เปนขอความทซำกน element ทมาจาก array หลงจะทบขอมลของ element ทม string index ทตรงกน

• array array_combine ( array keys, array values)

ใหผลลพธเปน array ทไดจาก array ใน argument 2 ตว โดยใชคาขอมลใน argument แรกเปน (keys) เปน key/index และใชขอมลจาก array values เปนคาขอมล หาก array ทงสองใน argument มจำนวน element ไมเทากน หรอเปน empty array จะใหผลเปน false

• array array_slice ( array arry, int offset [, int length])

ฟงกชน array_slice() ใหผลเปน array ทม element มาจาก array ใน argument เรมจากelement ลำดบทระบใน offset เปนจำนวน element ทระบใน length

หากคา offset เปนลบจะเรมจาก element ลำดบทยอนกลบมาจาก element สดทาย หากไมระบ length จะนำขอมลตงแต element ลำดบทตาม offset จนถง element สดทาย ฟงกชนนจะไมสนใจ key ผลลพธจะไดจากลำดบท element วางอยใน array

ตวอยางเชน<?php$a = array('apple','banana','coconut','grape','orange');$b = array_slice($a,2,2);$c = array_slice($a,-4,2);$d = array_slice($a,2);$e = array_slice($a,-2);?>

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 15: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

105

ผลลพธตวแปร array ตางๆ ไดแกb = Array ( [0] => coconut [1] => grape )c = Array ( [0] => banana [1] => coconut )d = Array ( [0] => coconut [1] => grape [2] => orange )e = Array ( [0] => grape [1] => orange )

2 7) การเขาถงขอมลใน array

• integer count (array ary[, int mode])

• integer sizeof(array ary[, int mode])

ฟงกชน count( ) และ sizeof( ) เปนฟงกชนทใหจำนวน element ทมใน array ary หากตองการนบจำนวน element ใน array หลายมตตองกำหนด mode เปน COUNT_RECURSIVE หรอ 1 หากไมกำหนดหรอกำหนดเปนคา 0 จะนบ element ของ array ลำดบนอกสด คอ index ซายสด

• mixed current ( array ary)

• mixed pos (array ary)

ฟงกชน current ( ) และ pos( ) ใหขอมลจาก array ary ณ ตำแหนงท internal pointer ของ array ary นนชอย โดยไมมผลตอ pointer (pointer จะไมเลอนไปยง element อนหลงจากใชฟงกชนน)

• void list(mixed)

list( ) เปน language construct ทใชดงคาจาก array นำมาใสในตวแปรทอยใน argument มรปแบบทแปลกกวาคำสงอนๆ เนองจากเปนคำสงทอยทางดานซายของ expression คอเขยนคำสงในรปแบบ list(var1,var2,…) = array เชน

<?php$a = array('apple','banana','coconut','grape','orange');list($x,$y,$z) = $a;?>

จากตวอยางนตวแปร $x จะมขอมล 'apple' ตวแปร $y จะมขอมล 'banana' และ $z จะมขอมล 'coconut' เราอาจจะขาม element บาง element ไดดวยการไมใสชอตวแปร เชนlist($x,,$y) = $a;

จะขาม element ทสองของ array $a ดงนนตวแปร $x และ $y จะมขอมล 'apple' และ 'coconut' ตามลำดบ

WEB PROGRAMMING Using PHP. and MySQL.

Page 16: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

106106106106

3 ฟงกชนเกยวกบขอมล Stringฟงกชนเกยวกบขอมลชนด string ในภาษา PHP แบงออกเปนกลมตางๆ และมรายละเอยด

ของฟงกชนทใชประโยชนกนโดยทวไปดงน3 1) ฟงกชนทใหขอมลจากขอความ

• int strlen(string str)

ฟงกชนทใหตวเลขความยาวของขอความทอยใน str เปนจำนวนอกขระ เชน strlen("abcdef"); จะไดคา 6 คอมอกขระจำนวน 6 ตว การใชงานอาจจะใชเพอตรวจสอบความยาวของขอความทผใชปอน เชน password หากมจำนวนอกขระนอยหรอมากกวาทกำหนดจะใหพมพเขาใหม เปนตน

ตวอยางการใชงาน (การรบขอมลจากผใชและตวแปร $_POST[ ] ดรายละเอยดในบทท 4)

<?phpdefine('PWD_MIN',4);define('PWD_MAX',8);function isBetween ($val, $min, $max) { return ($val>=$min && $val<=$max);}$pwlen = strlen($_POST['password']);if (!isBetween($pwlen, PWD_MIN, PWD_MAX)) echo "Password length must be 4-8 characters"; else echo "Password OK.";?>

• string substr(string str, int offset, int length)

ฟงกชนนจะใหบางสวนของขอความจาก str โดยเรมตงแตตำแหนงทระบใน offset (ตำแหนงของอกขระแรกสดคอ 0) เปนจำนวนความยาวตามทระบใน length เชน substr("abcdefghi",3,4) จะไดขอความ "defg" เปนตน หากคา offset เปนคาลบ จะนบยอนจากทายขอความ เชน substr("abcdefghi",-3,2) จะได "gh" เปนตน หากขอความทมใน str นอยกวาทระบใน offset และ length จะใหขอความเทาทมใน str เทานน เชน substr("abcdefghi",6,4) จะไดขอความ "ghi" เปนตน

หาก length เปนคาลบ หมายถงจำนวนอกขระทจะหยดไมนำมาเปนผลลพธนบจากทายขอความ เชน

<?php$rest = substr("abcdef", 0, -1); // returns "abcde"$rest = substr("abcdef", 2, -1); // returns "cde"$rest = substr("abcdef", 4, -4); // returns ""$rest = substr("abcdef", -3, -1); // returns "de"?>

• string trim (string str [, string charlist])

ใหผลลพธเปนขอความจาก str ทตด whitespace ทอยดานหนาและดานหลงของขอความออกแลว เชน trim(" vwxyz ") จะได "vwxyz" เปนตน อกขระทถอวาเปน whitespace ไดแก

o " " คอชองวาง o "\t" เครองหมาย tab.

o "\n" เครองหมายขนบรรทดใหม new line (line feed).

o "\r" เครองหมาย carriage return.

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 17: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

107

o "\0" อกขระ NUL (ASCII 0)

o "\x0B" เครองหมาย vertical tab.

นอกจากนยงสามารถกำหนดรายการของอกขระทจะตดออกไดเองแทนอกขระ whitespace ทกำหนดขางตนดวยโดยกำหนดอกขระทตองการใหตดทกตวใน charlist เชน ".\t " เปนการกำหนดวาใหตดอกขระ . และ \t (tab) และ space ทหวและทาย และสามารถใช .. เพอกำหนดชวงของอกขระทตองการตดออกได เชน trim($st,"\x00..\x1F") กำหนดใหตดอกขระควบคมทมรหส ASCII ตงแต 00 ถง 1F ออกทงหมด เปนตน

• string ltrim (string str [, string charlist])

ใหผลลพธเปนขอความจาก str ทตด whitespace หรออกขระทกำหนดใน charlist ทอยดานหนา (ทางซาย) ของขอความออก เชน ltrim(" vwxyz ") จะได "vwxyz " เปนตน (อกขระ whitespace และการกำหนด charlist ทำไดเหมอนกบฟงกชน trim( ))

• string rtrim (string str [, string charlist])

• string chop (string str [, string charlist])

ใหผลลพธเปนขอความจาก str ทตด whitespace หรออกขระทกำหนดใน charlist ทอยดานหลงของขอความออกแลว เชน rtrim(" vwxyz ") จะได " vwxyz" เปนตน (อกขระ whitespace และการกำหนด charlist ทำไดเหมอนกบฟงกชน trim( ))

กลมฟงกชนทใหขอความทเปลยนอกษรตวใหญ-เลก (upper/lower case) ของภาษาองกฤษในขอความ ม 4 ฟงกชนไดแก

• string strtolower (string str) เปลยนเปนอกษรตวเลก เชน strtolower("ABc X2") จะไดขอความ "abc x2" เปนตน

• string strtoupper (string str) เปลยนเปนอกษรตวใหญ เชน strtoupper("xod2-je") จะไดขอความ "XOD2-JE" เปนตน

• string ucwords (string str) เปลยนเปนอกษรตวใหญทตวอกษรแรกของคำ ฟงกชนนจะไมเปลยนแปลงตวอกษรตวอนๆ หากตวอนๆ เปนตวใหญกจะไมเปลยนใหเปนตวเลก หากตองการตวใหญเฉพาะตวแรกใหใชฟงกชน strtolower( ) รวมกบ ucwords( ) เชน ucwords(strtolower($str)) เพอแปลงขอความทงหมดใหเปนตวเลกกอนแลวจงแปลงอกษรตวแรกของคำใหเปนตวใหญ

• string ucfirst (string str) เปลยนตวอกษรแรกของขอความเปนอกษรตวใหญ (ฟงกชนนจะไมเปลยนแปลงตวอกษรตวอนๆ หากตวอนๆ เปนตวใหญกจะไมเปลยนใหเปนตวเลก)

• string str_repeat ( string input, int multiplier)

ฟงกชนนจะสรางขอความโดยทำซำขอความจาก input เปนจำนวน multiplier ครง เชน

$st = str_repeat("= ", 10);$pws = str_repeat("*", strlen($pwd));

ในตวแปร $st จะมขอความ "= = = = = = = = = = " อยภายใน สวน $pws จะมตว * เปนจำนวนเทากบความยาวของขอความทอยในตวแปร $pwd เปนตน

• string str_pad ( string input, int pad_length [, string pad_string [, int pad_type]])

WEB PROGRAMMING Using PHP. and MySQL.

Page 18: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

108108108108

ฟงกชนนจะใหขอความทเตมชองวางหรอขอความทตองการทระบใน pad_string เขาไปทดานหนาหรอตอทายขอความใน input เพอใหมความยาวของขอความภายในผลลพธครบจำนวน pad_length ตว การเตมสามารถทำไดทงดานหนาหรอททายขอความระบโดย pad_type

o หากไมระบ pad_string จะใชชองวางเพอเตมขอความ

o pad_type เปนการระบการเตมจะเตมอยางไร โดยม STR_PAD_RIGHT เตมตอทายหรอทางขวาของขอความ, STR_PAD_LEFT เตมดานหนาหรอทางซายของขอความ, STR_PAD_BOTH เตมทงดานหนาและตอทาย หากไมระบ pad_type จะเตมททายหรอดานขวาของขอความ

o หาก pad_length มคาเปนลบหรอมคานอยกวาความยาวขอความใน input จะไมมการเตมขอความเพมเขาไป

o ขอความทระบใน pad_string จะใชเตมจนกระทงไดขอความทยาวครบตามทระบใน pad_length เทานนตวอยาง str_pad ("abc",8) จะได "abc "

str_pad ("abc",8, ".", STR_PAD_LEFT) จะได ".....abc"str_pad ("abc",8, "-",STR_PAD_BOTH) จะได "--abc---"str_pad ("abc",8, "!?!#") จะได "abc!?!#!"

• string str_shuffle ( string str)

ฟงกชน str_shuffle จะใหผลเปนขอความททำการสบเปลยนลำดบของอกขระตางๆ ทอยใน str โดยการสม เชน str_shuffle("macintosh powerbook G4") จะไดขอความทสลบลำดบของอกขระตางๆ อยางสม เชนอาจไดเปน "whGtoombnorea4k si ocp" เปนตน

• string strtok ( string arg1, string arg2)

strtok() จะทำการแยกขอความจาก arg1 เปนขอความยอยโดยใชอกขระจาก arg2 เปนตวแยกขอความ และหากมการเรยกใชฟงกชนนอกดวย argument เพยงตวเดยวเปน arg2 จะทำการแยกขอความยอยลำดบถดไปจากขอความเดม ตวอยางเชนการดงคำแตละคำออกจากประโยคในภาษาองกฤษ สามารถใชฟงกชน strtok( ) โดยระบเครองหมาย whitespace เปนตวแยกขอความแสดงตวอยางไดดงน

1 <?php2 $string = "This is\tan example\nstring";3 /* Use tab and newline as tokenizing characters as well */4 $tok = strtok($string, " \n\t");5 while ($tok) {6 echo "Word=$tok<br />";7 $tok = strtok(" \n\t");8 }9 ?>

จากตวอยาง การเรยกใช strtok( ) ในบรรทดท 4 จะระบ argument ทงสองตวเรมตนครงแรก และในการวนรอบคำสงในบรรทดท 7 จะใช strtok( ) เพอดงขอความลำดบถดไปซงจะระบ argument เปนตวคนขอความเพยง argument เดยว หากตองการแยกขอความอนกสามารถใช strtok( ) โดยระบ argument สองตว

ตวอยาง<?php$dataline = "23546,Tim Berton:100-555-478";$uid = strtok($dataline,",:");$uname = strtok(",:");$ucode = strtok(",:");?>

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 19: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

109

• string strtr ( string str, string from, string to)

• string strtr ( string str, array replace_pairs)

ใหขอความทมการแทนอกขระทกำหนดใน from ดวยอกอกขระทกำหนดใน to จากขอความใน str หรอใช associative array เพอใช key/value ระบขอความทจะทำการแทน การกำหนดอกขระใน from และ to สามารถกำหนดหลายตวไดซงการแทนจะเปนคกนคอ อกขระท 1 ใน from จะถกแทนดวยอกขระท 1 ใน to อกขระท 2 ใน from จะถกแทนดวยอกขระท 2 ใน to ฯลฯ ดงนนจำนวนอกขระใน from และ to ควรจะเทากนเพอใชเปนคกน หากมจำนวนไมเทากน สวนทยาวกวาจะถกตดออก

ตวอยาง $addr = strtr($addr, "ฃฅ", "ขค")

หากเรยกใชฟงกชน strtr( ) โดยม argument เพยงสองตว ใน argument ตวทสองจะกำหนดเปน associative array ทใช key เปนขอความเดมและ value เปนขอความใหมทจะแทน การแทนจะตรวจสอบขอความทตรงกบ key ทยาวทสดกอน และขอความสวนทถกแปลงไปแลวจะไมตรวจสอบกรณอนอก ตวอยางเชน

<?php$trans = array("hello" => "hi", "hi" => "hello");$res = strtr("hi all, I said hello", $trans);?>

จะไดตวแปร $res มขอความ "hello all, I said hi"

• int substr_count ( string haystack, string needle)

ฟงกชน substr_count() จะแสดงจำนวนขอความ needle ทพบอยในขอความ haystack ตวอยางเชน substr_count("This is a test", "is") จะไดคา 2 คอพบคำวา "is" 2 ครง

3 2) การแสดงผลขอความ• void echo string args

เปนคำสงแสดงผลขอความทไดกลาวถงมาในบทท 2 แลว มลกษณะเปนคำสงพเศษทเรยกวา language construct ไมจำเปนตองมวงเลบครอบ argument และมจำนวน argument ทเปน stringไดหลายตวคนโดย comma รายละเอยดจะกลาวถงอกครงในหวขอ 4.1 ในบทท 4

• int print ( string arg)

ฟงกชนแสดงผลขอความ จะกลาวถงรายละเอยดอกครงในหวขอ 4.1 บทท 4

• void printf ( string format [, mixed args])

คำสง printf ( ) เปนคำสงแสดงผลออกไปยง browser ตามรปแบบทกำหนด เหมอนฟงกชน printf( ) ในภาษา C/C++, Java เปนคำสงทเปน language construct รายละเอยดของคำสงนกลาวถงอยในหวขอ 4.1 ของบทท 4

• string sprintf ( string format [, mixed args])

ฟงกชน sprintf( ) ใหผลขอความทถกจดรปแบบตามรปแบบทระบ การกำหนดรปแบบเหมอนกบคำสง printf( ) รายละเอยดของคำสงนแสดงอยในหวขอ 4.1 ของบทท 4

WEB PROGRAMMING Using PHP. and MySQL.

Page 20: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

110110110110

• void vprintf ( string format, array args)

ฟงกชน vprintf( ) เปนฟงกชนทใชแสดงผลขอมลใน array ตามรปแบบทกำหนดใน format เหมอนกบคำสง printf( ) แตจะนำขอมลใน array มาใชแทนการกำหนดตวแปรหลายตวใน argument รายละเอยดการกำหนดรปแบบการแสดงผล ดไดจากฟงกชน printf( ) และ sprintf( ) หวขอ 4.1 ในบทท 4

• string vsprintf ( string format, array args)

ฟงกชน vsprintf( ) จะใหผลลพธเปนขอความทนำขอมลมาจาก array args มาจดรปแบบตาม format เชนเดยวกบฟงกชน sprintf( ) (ดรายละเอยดเพมเตมเกยวกบ format จากฟงกชน printf( ), sprintf( ) หวขอ 4.1 ในบทท 4

• string number_format ( float number [, int decimals])

• string number_format ( float number, int decimals, string dec_point, string thousands_sep)

ฟงกชน number_format( ) ใหขอความทแสดงผลตวเลขแบบมการแบงกลมหลกพนดวยตวคน เชน 12,345 หรอ 12,345.67 หรอ 12 345f67 กำหนดรปแบบการแสดงผลโดย argument ตางๆ ไดแก

• number คอขอมลตวเลขทจะใชแสดง• decimal คอจำนวนเลขหลงจด หากไมกำหนดจะไมมเลขหลงจด• dec_point คอเครองหมายทใชแทนจดทศนยม (เชนในประเทศฝรงเศส ใชเวนวรรค

คนทกๆ หลกพน

• thousands_sep คอเครองหมายทใชแทนเครองหมาย comma ทใชคนหลกพน จะนำอกขระมาใชเพยงตวเดยว หากกำหนดเปนขอความหลายตวจะใชอกขระตวแรกเทานน หากไมตองการมตวคนหลกพน ใหกำหนดเปน empty string ""

ตวอยางเชน

<?php$number = 1234.56;// english notation (default)$english_format_number = number_format($number);// French notation$nombre_format_francais = number_format($number, 2, ',', ' ');$number = 1234.5678;$english_format_number = number_format($number, 2, '.', '');// 1234.57?>

• bool print_r ( mixed expression [, bool return])

เปนฟงกชนทจะแสดงขอมลเกยวกบตวแปรสงไปแสดงผลบนบราวเซอรในรปแบบทเขาใจไดชดเจน โดยทวไปจะใชในการแสดงผลตวแปรในระหวางการทดสอบโปรแกรม เพอแสดงคาผลลพธทเกบอยในตวแปร

ตวอยางลกษณะของการใชฟงกชน print_r( ) เพอแสดงผลขอมลในตวแปร array

<pre><?php $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); print_r ($a);

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 21: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

111

?></pre>

จะแสดงผลลพธเปน

<pre>Array( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ))</pre>

หมายเหต การใช <pre> เพอใหแสดงผลขอความโดยมการขนบรรทดใหม การเวนวรรคตามทปรากฏในขอความ หากไมมการใช <pre> ผลทปรากฏบนจอ browser จะแสดง

Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) )

• void var_dump (mixed expr1 [, mixed expr2 [, …]])

ฟงกชน var_dump( ) จะแสดงโครงสรางชนดและขอมลของตวแปร ตวอยางเชน<?php$a = array (1, 2, array ("a", "b", "c"));var_dump($a);?>

จะใหผลลพธแสดงเปนarray(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }}

ตวอยาง<?php$b = 3.1;$c = true;var_dump($b, $c);?>

จะใหผลลพธแสดงเปนfloat(3.1)bool(true)

• string nl2br (string str)

WEB PROGRAMMING Using PHP. and MySQL.

Page 22: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

112112112112

ฟงกชน nl2br( ) ใหผลลพธเปนขอความทแทรกคำสง <br> กอนเครองหมายขนบรรทดใหมในขอความจาก argument str ใชในกรณทมขอมลทไดขอความธรรมดาหรอขอความทผใชปอนเขาจาก field ประเภท text area จะนำมาแสดงผลใหมการขนบรรทดใหมเหมอนในขอความ ซงโดยปกตขอความเมอนำมาแสดงบน web browser ในลกษณะภาษา HTML จะถอวาการขนบรรทดใหมในขอความเปนเพยงตวคนตวหนงทจะแสดงเปนการเวนวรรค หากตองการใหขอความทแสดงออกมาบนจอ browser ขนบรรทดใหมจะตองใช <p> ในกรณเปนยอหนาใหม หรอใช <BR> ในกรณขนบรรทดใหมในยอหนาเดม

ตวอยางเชน nl2br("ขาวลาสด\n24 พฤษภาคม 2548") จะไดขอความ "ขาวลาสด<br>\n24 พฤษภาคม 2548"

การรบขอมลเขาจากผใชผานทาง query string หรอ form field (รายละเอยดในบทท 4) เพอนำไปใชเปนขอมลอนๆ เชนนำไปเกบลงในฐานขอมล มอกขระบางตวทจะตองมเครองหมาย escape คอ \ นำหนา เชน เครองหมายคำพดทง single และ double quote เครองหมาย \ เอง ซงมความสำคญตอความปลอดภยของขอมลในระบบฐานขอมลดวย ในภาษา PHP ไดเตรยมฟงกชนชวยในการแทรกอกขระ backslash เขาไปในขอความนำหนาอกขระทจำเปนและมฟงกชนทใชดงเครองหมาย \ ออกจากขอความทเตม \ นำหนาอกขระพเศษ ไดแก addslashes( ) และ stripslashes( )

• string addslashes ( string str)

ใหขอความทแทรกเครองหมาย \ นำหนาอกขระ single quote ('), double quote ("), backslash (\) และ NUL อกขระทมหมายเลข ASCII 0 ตวอยางการใช

$safestr = addslashes($_POST['uname']);

ในการตดตง PHP ทกำหนด directive "magic_quotes_gpc" ใหเปน ON หรอใชคา default จะมการใชฟงกชน addslashes( ) กบขอมลทมาจากการ GET, POST, และ COOKIE โดยอตโนมตอยแลวดงนนในโปรแกรมจะตองไมใชฟงกชนนซำอก หรอใชฟงกชนเพอตรวจสอบคอ get_magic_quotes_gpc( ) ซงจะใหผลเปน 0 หาก directive "magic_quotes_gpc" ถกตงเปน OFF และจะให 1 หาก directive "magic_quotes_gpc"ถกตงเปน ON ไว ตวอยางเชน

$safestr = get_magic_quotes_gpc( )==0?addslashes($_POST['uname']): $_POST['uname'];

• string stripslashes ( string str)

เปนฟงกชนทจะตด \ ทนำหนา single quote ('), double quote ("), backslash (\) และ NUL ออก

3 3) การเปรยบเทยบคนหาขอความ• string strstr ( string haystack, string needle)

• string strchr ( string haystack, string needle)

จะใหขอความบางสวนจาก haystack เรมตงแตตำแหนงทพบขอความทระบใน needle ตวแรกจนจบขอความ หากไมพบขอความทระบใน needle จะใหผลลพธ false หาก needle ไมใช string จะทำการแปลงใหเปน integer และใชเปนรหส ASCII ของอกขระทจะคนหา

การคนหาเปรยบเทยบขอความเปนแบบ case-sensitive หากตองการคนหาแบบ case-insensitive ใหใชฟงกชน stristr()

หากตองการตรวจสอบเพยงวามขอความทระบใน needle อยใน haystack หรอไม ควรจะใชฟงกชน strpos( ) ซงทำงานไดเรวกวาและใชหนวยความจำนอยกวา

<?php$email = '[email protected]';

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 23: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

113

$domain = strstr($email, '@');echo $domain; // prints @example.com?>

• string stristr ( string haystack, string needle)

คอฟงกชนททำงานเหมอนกบ strstr( ) แตจะคนหาแบบ case-insensitive

• string strrchr ( string haystack, char needle )

เปนฟงกชนทใหผลเปนขอความนบตงแตตำแหนงทายสดทคนพบอกขระทระบใน needle อยในขอความทระบใน haystack จนจบขอความ ขอมล needle จะใชเพยงอกขระ (character) เดยวหากมหลายตวจะใชเฉพาะตวแรก หาก needle ไมใชขอความจะถกถอเปน integer และใชเปนคา ASCII ของอกขระทใชคนหา

• int strpos ( string haystack, string needle [, int offset])

ใหตวเลขแสดงตำแหนงทพบขอความทระบใน needle ทอยในขอความทระบใน haystack ตวแรกทพบ แตหากไมพบจะใหผลเปน false การตรวจสอบวาไมพบจะตองตรวจสอบชนดของผลลพธเปน Boolean ดวยคอใช operator === เชน

if (strops($st,$key)=== false) { echo "Not found."; }

เนองจากอาจจะไดตวเลข 0 หากพบขอความตงแตตำแหนงแรก และเลข 0 สามารถแปลงไดเปน false ไดหากไมตรวจสอบชนด

Argument ตวทสามคอ offset ใชระบตำแหนงในขอความของ haystack ทจะเรมตนคนหา ซงอาจจะนำไปใชคนหาขอความทพบในลำดบถดไปได

ตวอยาง<?php$mystring = 'abc';$findme = 'a';$pos = strpos($mystring, $findme);

// Note our use of ===. Simply == would not work as expected// because the position of 'a' was the 0th (first) character.if ($pos === false) { echo "The string '$findme' was not found in the string '$mystring'";} else { echo "The string '$findme' was found in the string '$mystring'"; echo " and exists at position $pos";}

// We can search for the character, ignoring anything before the offset$newstring = 'abcdef abcdef';$pos = strpos($newstring, 'a', 1); // $pos = 7, not 0?>

หาก needle ไมใช string จะทำการแปลงใหเปน integer และใชเปนรหส ASCII ของอกขระทจะคนหา และการคนหาเปรยบเทยบขอความเปนแบบ case-sensitive หากตองการคนหาแบบ case-insensitive ใหใชฟงกชน stripos()

• int stripos ( string haystack, string needle [, int offset])

WEB PROGRAMMING Using PHP. and MySQL.

Page 24: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

114114114114

ฟงกชน stripos( ) ทำงานเชนเดยวกบ strpos( ) แตจะคนหาแบบ case-insensitive

• int strrpos ( string haystack, string needle [, int offset])

เปนฟงกชนทจะใหตำแหนงทคนพบอกขระทระบใน needle ครงสดทายในขอความทระบใน haystack ซงอาจจะระบตำแหนงแรกทจะเรมคนหา (offset) ได ขอมล needle จะใชเพยงอกขระ (character) เดยวหากมหลายตวจะใชเฉพาะตวแรก การคนหาจะมลกษณะ case-sensitive

• int strripos ( string haystack, string needle [, int offset])

ฟงกชน strripos( ) ทำงานเชนเดยวกบ strrpos( ) แตจะคนหาแบบ case-insensitive

ฟงกชนทเกยวกบการเปรยบเทยบขอความ 2 ขอความ เปนฟงกชนซงจะใหผลเปนคา 0 หากขอความทงสองเทากน จะใหคาเปนตวเลขจำนวนเตมท < 0 หากขอความใน argument ซาย (str1) นอยกวาขอความใน argument ขวา (str2) และจะใหคาเปนตวเลขจำนวนเตมท > 0 หากขอความทางขวามากกวาขอความทางซาย มฟงกชนตางๆ ไดแก

• int strcmp ( string str1, string str2)

เปนฟงกชนททำการเปรยบเทยบแบบ case sensitive

• int strcasecmp ( string str1, string str2)

เปนฟงกชนททำการเปรยบเทยบแบบ case-insensitive

• int strncmp ( string str1, string str2, int len)

เปนฟงกชนททำการเปรยบเทยบขอความจำนวน n ตวตามแรก ระบความยาวขอความทจะเปรยบเทยบใน argument len เปนการเปรยบเทยบแบบ case sensitive

• int strncasecmp ( string str1, string str2, int len)

เปนฟงกชนททำการเปรยบเทยบขอความจำนวน n ตวตามแรก ระบความยาวขอความทจะเปรยบเทยบใน argument len เปนการเปรยบเทยบแบบ case-insensitive

• int strnatcmp ( string str1, string str2)

เปนฟงกชนททำการเปรยบเทยบขอความโดยดลำดบขอความทเปนตวเลขจากคาของเลขทงจำนวน ไมไดเปรยบเทยบตวตอตว เชน "B250" > "B90" หากเปรยบเทยบตวตอตวเลข 9 จะมคามากกวาเลข 2 แตการเปรยบเทยบแบบคาตวเลขทงจำนวน 250 มคามากกวา 90 ในสวนขอความการเปรยบเทยบเปนแบบ case sensitive

• int strnatcasecmp ( string str1, string str2)

เปนฟงกชนททำการเปรยบเทยบขอความโดยดลำดบขอความทเปนตวเลขจากคาของเลขทงจำนวน ไมไดเปรยบเทยบตวตอตว เชน "B250" > "B90" หากเปรยบเทยบตวตอตวเลข 9 จะม

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 25: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

115

คามากกวาเลข 2 แตการเปรยบเทยบแบบคาตวเลขทงจำนวน 250 มคามากกวา 90 ในสวนขอความการเปรยบเทยบเปนแบบ case-insensitive

3 4) การแยกขอความ• string chunk_split ( string body [, int chunklen [, string end]])

ใชแยกขอความใหเปนขอความทมขนาดความยาวจำกดในแตละบรรทด ซงจะมประโยชนในการใชสรางขอความเขารหสดวยฟงกชน base64_encode( ) โดยการแทรกเครองหมายขนบรรทดใหม "\r\n" ทกๆ 76 ตวของขอความ หรออาจกำหนดความยาวไดจาก chunklen สวน end ใชกำหนดอกขระทจะแทรกหากจะไมใช "\r\n"

ตวอยาง<?php// format $data using RFC 2045 semantics$new_string = chunk_split(base64_encode($data));?>

ดตวอยางการใชเพมเตมในบทท 11 การสงอเมล

• array explode ( string separator, string str [, int limit])

จะทำการแยกขอความ str ออกเปน ขอความยอยเกบลงใน element ของ array โดยใช separator เปนตวคนทใชแยก หากมการกำหนด limit จะจำกดใหเกด array ขนจำนวน element ไมเกนทกำหนดใน limit และขอความทเกนจะรวมกนอยใน element สดทาย

หาก separator ระบเปน empty string ("") ฟงกชนจะใหคา false หากไมมขอความ separator ปรากฏใน str เลยจะได array ทม element เดยว

ตวอยาง <?php// Example 1$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";$pieces = explode(" ", $pizza);echo $pieces[0]; // piece1echo $pieces[1]; // piece2

// Example 2$data = "foo:*:1023:1000::/home/foo:/bin/sh";list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);echo $user; // fooecho $pass; // *

?>

• string implode ( string glue, array pieces)

สรางขอความจากการนำขอความใน element ของ array มาเรยงกนโดยม glue เปนตวคน ตวอยางเชน

<?php$array = array('lastname', 'email', 'phone');$comma_separated = implode(",", $array);echo $comma_separated; // lastname,email,phone?>

WEB PROGRAMMING Using PHP. and MySQL.

Page 26: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

116116116116

• array parse_url ( string url)

ฟงกชนนจะใหผลลพธเปน array ทม element ทมาจากการแยกสวนประกอบตางของขอความทเปน URL เปน associative array ทม key สมพนธกบสวนประกอบของ URL ทคดแยกไดดงน

o ['scheme'] เชน http

o ['host'] ชอ host

o ['port'] หมายเลข port ทระบโดย :portno

o ['user'] ชอ user

o ['pass'] ขอความ password

o ['path'] ชอ path

o ['query'] ขอความหลงเครองหมาย ? o ['fragment'] ชอตำแหนงในเอกสาร อยหลงเครองหมาย #

รปแบบของขอความ URL ไดแกhttp:portno//username:password@hostname/path?arg=value#anchor

หากขอความทนำมาแยกไมมสวนประกอบ URL สวนใด element ของ array นนจะไมถกสรางขน ในสวนของ query string สามารถประกอบดวย arg=value ไดหลายชดโดยคนดวย & ซงขอความ query ทงหมดจะถกใสลงใน element ['query'] หากตองการแยกขอมลใน query แตละชดออกสรางเปนตวแปรสามารถใชฟงกชน parse_str( ) ทำการแยกได

3 5) การแปลงรหส-เขารหสขอความและอกขระ• char chr(int asc)

ใหอกขระ 1 ตวตามรหส ASCII ทระบใน argument asc ตวอยางเชน$st = "ABC" . chr(27);

ดความหมายรหส ASCII ไดจาก http://www.asciitable.com.

• int ord ( string str)

ใหหมายเลขรหส ASCII ของอกขระตวแรกในขอความ str

• string base64_encode ( string data)

ฟงกชนนจะทำการเขารหสขอมลแบบ base64 ซงเปนวธการเขารหสทจะทำการแปลงขอมลเลขฐานสองไมวาจะเปนขอมลใดๆ ใหเปนขอความทสามารถสงผานชนการสอสาร transport layers ได เชนใชสรางสวนของการสง attached file ใน e-mail ดรายละเอยดการใชงานในบทท 11 การสงอเมล

(ในการเขารหสแบบ base64 จะตองเพมขอมลเพอแปลงเลขฐานสองใดๆ ใหกลายเปนขอความซงจะทำใหขนาดของขอมลใหญขนประมาณหนงในสาม)

<?php $str = 'This is an encoded string'; echo base64_encode($str);?>

ขอความในตวอยางเมอถกเขารหสแลวจะกลายเปน

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 27: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

117

VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==

• string crypt ( string str [, string salt])

ฟงกชน crypt( ) เปนฟงกชนทจะทำการเขารหสขอความแบบทางเดยวคอจะไมมการถอดรหสกลบมาเปนขอความเดม จะใหผลลพธเปนขอความทถกเขารหสโดยใชอลกอรธมเขารหสมาตรฐาน DES หรอใน server บางระบบอาจใชอลกอรธมมาตรฐานอน argument str คอขอความทจะนำไปเขารหส สวน salt คอขอความทใชเปนฐานในการเขารหส ขอความซงเปน string ทม 2 character หากไมระบคา salt จะใชขอความท PHP สรางขนเอง

การเขารหสแบบทางเดยวมกจะนำไปใชกบการเกบรหสผาน โดยทรหสผานทผใชกำหนดไวจะถกเขารหสและเกบไวในรปแบบทเขารหสแลว และเมอจะใชรหสผาน จะนำขอความรหสผานทผใชปอนเขา นำมาเขารหสและนำขอความทถกเขารหสมาเปรยบเทยบกบรหสผานทถกตองทถกเขารหสไว คอนำขอความทถกเขารหสแลวมาเปรยบเทยบกน ซงไมมความจำเปนจะตองถอดรหสกลบมา

ในการเขารหสมาตรฐาน DES-based ฟงกชน crypt() จะใหผลลพธ 2 อกขระแรกเปนคา salt ทใชในการเขารหส หากไมมการระบคา salt ในฟงกชน crypt( ) จะใชคา salt ท PHP สมสรางขนเองซงจะแสดงท 2 อกขระแรก ดงนนเมอจะนำขอความมาเขารหสเพอเปรยบเทยบกบขอความทเขารหสไวแลว สามารถนำขอความ 2 อกขระแรกจากขอความทเขารหสแลวมาใชได ดงตวอยาง

<?php$password = crypt("My1sTpassword"); // let salt be generated

if (crypt($user_input, $password) == $password) { echo "Password verified!";}?>

• string md5 ( string str)

จะทำการสรางขอความทเปนการเขารหสแบบ MD5 hash ของขอความทระบใน argument str ซงเปนวธเขารหสมาตรฐานของ RSA Data Security, Inc. การเขารหสแบบ MD5 จะไดรบคาขอความ hash ทแสดงเลขฐานสบหกจำนวน 32 ตว

<?php$str = 'apple';

if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') { echo "Would you like a green or red apple?"; exit;}?>

• string md5_file ( string filename)

จะนำขอมลจากไฟลทกำหนดใน filename มาทำการสรางขอความทเปนการเขารหสแบบ MD5 hash หากไมสามารถอานขอมลจากไฟลไดจะใหผลลพธเปนคา false

• string sha1 ( string str )

จะทำการสรางขอความทเปนการเขารหสแบบ US Secure Hash Algorithm 1 ของขอความทระบใน argument str ซงเปนวธเขารหสทใหคาขอความ hash ทแสดงเลขฐานสบหกจำนวน 40 ตว

WEB PROGRAMMING Using PHP. and MySQL.

Page 28: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

118118118118

• string sha1_file ( string filename )

จะนำขอมลจากไฟลทกำหนดใน filename มาทำการสรางขอความทเปนการเขารหสแบบ sha1 hash หากไมสามารถอานขอมลจากไฟลไดจะใหผลลพธเปนคา false

3 6) การเขารหส URL/HTML

• string urlencode ( string str)

หากเปน urlencode( ) จะเขารหส URL. เชนเดยวกนกบการเขารหสเมอมการ post ขอมลจาก field ใน HTML form โดยใชวธเขารหสปกตหรอกำหนด enctype เปน application/x-www-form-urlencoded คอจะเปลยนอกขระทไมใชตวอกษรและตวเลขไปเปน % ตามดวยรหส ASCII เปนเลขฐานสบหก เชน เครองหมาย ! ถกแปลงเปน %21 (21 เปนเลขฐาน 16 ของเลข 33 ในฐานสบ) เวนแตชองวาง space (ASCII #20) จะถกแทนดวยเครองหมาย + เชน urlencode( "wait a minute!") จะไดผลลพธขอความทแปลงเปน "wait+a+minute%21" เปนตน

ฟงกชนนจะนำไปใชในการเตรยมชอ URL และ query string สำหรบเปนคาใหแก argument ของ HTML tag เชน

<A HREF="order.php?prod=<?= urlencode($userinput)?>">

สำหรบการสงขอมลใน query string ตอทายชอ URL. โดยใชขอมลจากตวแปรทผใชปอนเขา หรอนำขอมลมาจากทใดๆ มขอควรระวง ขอมลทอาจประกอบดวยอกขระ & ทปกตใชเปนตวคนระหวางตวแปรใน query string (page.php?var1=value1&var2=value2) ดงนนควรจะใชฟงกชนชวยอกฟงกชนหนงคอ htmlentities( )

<A HREF="order.php?prod=<?= htmlentities(urlencode($userinput))?>">

• string rawurlencode ( string str)

rawurlencode( ) แปลงอกขระทไมใช alphanumeric ไปเปน ascii code number ทนำหนาดวย % และรหสเลขฐานสบหก เชน rawurlencode( "wait a minute!") จะไดผลลพธขอความทแปลงเปน "wait%20a%20minute%21" เปนตน

• string urldecode ( string str)

• string rawurldecode ( string str)

ฟงกชน urldecode( ), และ rawurldecode( ) จะแปลงขอความท encode แบบ URL. กลบเปนขอความปกต

หมายเหต ขอความทถกเขารหสใน query string เมอมการสงเขามาใน page จะเกดการถอดรหสกลบมาเปน character ตามปกตใหโดยอตโนมตอยแลว เชน หากมการระบขอมลใน query string ดงน a=%25%34&b=a+b จะไดตวแปร a มขอมล %4 (%25 คอเครองหมาย %, %34 คอเลข 4) และตวแปร b มขอมล "a b" (+ คอชองวาง)

• string htmlspecialchars ( string string [, int quote_style])

htmlspecialchars() แปลงอกขระบางตวใหกลายเปน code พเศษของ HTML ไดแก < เปน &lt; , > เปน &gt; , & เปน &amp; , ' เปน &#039; และ " เปน &quot;

ฟงกชนนมประโยชนคอปองกนไมใหม HTML. Tag ปนเขามาในขอความทผใชปอนเขามา อาจจะเปน web bard, forum, guest book หากผใชปอนขอความในในลกษณะทเปน HTML tag ขอความนนจะถกแปลงใหกลายเปนขอความใน HTML ทแสดงผลไดตามสงทผใชปอน

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 29: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

119

เชน หากผใชปอนขอความ "<u>สำคญมากโปรดอาน</u>" ซง "<u>" หากสงไปหา browser จะเปนการขดเสนใต แตหากมการใชฟงกชน htmlspecialchars( ) ชวย ขอความนนจะถกแปลงเปน "&lt;u&gt;สำคญมากโปรดอาน&lt;/u&gt;" เมอขอความนถกสงไปแสดงบน browser กจะแสดงบนหนาจอ browser เหมอนขอความจากตนฉบบเดมคอ <u>สำคญมากโปรดอาน</u>

argument ตวทสองของฟงกชนคอ quote_style ใชกำหนดเกยวกบการแปลงเครองหมายคำพด หากไมกำหนดหรอกำหนดเปน ENT_COMPAT จะแปลงเฉพาะ " (double-quote) ไมแปลง ' single-quote หากกำหนดเปน ENT_QUOTES จะทำการแปลงทงคและหากกำหนดเปน ENT_NOQUOTES จะไมทำการแปลงทงคใหคงเปนเครองหมายคำพดเชนเดม

ตวอยางเชน หากในโปรแกรมมการรบขอมลจาก field opinion และจะนำขอความนนสงกลบไปแสดงผลในรปแบบเดมทถกปอนเขามา

<?php$msg = htmlspecialchars($_POST['opinion']);echo $msg; ?>

ตวอยาง1 <html> 2 <head> 3 <title>Source code listing</title> 4 </head> 5 6 <body> 7 8 <?php 9 $lines = explode("\n",$_POST['source']); 10 foreach($lines as $i=>$v) { 11 if ($i==0) echo "<table>\n"; 12 $ln = $i+1; 13 $src = htmlspecialchars ($v); 14 echo "<tr><td valign=top><code>$ln</code></td> <td><code>$src</code></td></tr>\n"; 15 } 16 echo "</table>"; 17 ?> 18 19 </body> 20 </html> >

• string htmlentities (string string [, int quote_style [, string charset]])

ฟงกชน htmlentities( ) จะทำการแปลงอกขระพเศษในภาษา HTML ใหกลายเปน escape sequence เชนเดยวกบฟงกชน htmlspecialchars( ) แตจะมจำนวนอกขระทแปลงทเปนอกขระพเศษของ HTML ทกตว ซงมากกวาการใช htmlspecialchars( ) ซงเนนเฉพาะการปองกนไมใหเกด HTML tag ขนในขอความ

ฟงชนนม argument quote_style เชนเดยวกบฟงกชน htmlspecialchars( ) และกำหนดคาไดเหมอนกน และใน argument ทสามคอ charset จะใชระบ character set หรอการกำหนดภาษา ซงจะมการแปลงเขารหสของอกขระทไมใชภาษาองกฤษตามรปแบบ charset ดวย โดยใน PHP ไดรองรบการเขารหสภาษาตางๆ ดงตาราง (หากระบ charset ท PHP ไมรองรบ จะใช ISO-8859-1 character set แทน)

ตารางท 3.3-1 character sets ท PHP 4.3.0 เปนตนไปรองรบ. Charset Aliases Description

ISO-8859-1 ISO8859-1 Western European, Latin-1

ISO-8859-15 ISO8859-15 Western European, Latin-9. Adds the Euro sign, French and Finnish letters missing in Latin-1(ISO-8859-1).

WEB PROGRAMMING Using PHP. and MySQL.

Page 30: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

120120120120

UTF-8 ASCII compatible multi-byte 8-bit Unicode.

cp866 ibm866, 866 DOS-specific Cyrillic charset. This charset is supported in 4.3.2.

cp1251 Windows-1251, win-1251, 1251

Windows-specific Cyrillic charset. This charset is supported in 4.3.2.

cp1252 Windows-1252, 1252

Windows specific charset for Western European.

KOI8-R koi8-ru, koi8r Russian. This charset is supported in 4.3.2.

BIG5 950 Traditional Chinese, mainly used in Taiwan.

GB2312 936 Simplified Chinese, national standard character set.

BIG5-HKSCS Big5 with Hong Kong extensions, Traditional Chinese.

Shift_JIS SJIS, 932 Japanese

EUC-JP EUCJP Japanese

การใช htmlentities( ) ใชเชนเดยวกบ htmlspecialchars( ) โดยจะไมใหมการใชอกขระพเศษของ HTML ในขอความเลย เชนขอความ "Copyright &copy; 2005" โดยปกตหากสงไปแสดงบน browser จะแสดงขอความ Copyright © 2005 แตหากนำขอความนนผานฟงกชน htmlentities( ) นำไปแสดงผลกจะปรากฏเปนขอความเหมอนตนฉบบไดแก Copyright &copy; 2005

หากตองการแปลงขอความทมการใช html entitles หรอ esacpe character ใหกลบมาเปนขอความปกต จะใชฟงกชน html_entity_decode( ) (ศกษาเพมเตมไดจาก PHP manual)

• string strip_tags ( string str [, string allowable_tags])

การใชฟงกชน htmlspecialchars( ) จะแปลงขอความเพอไมใหเกดความหมายเปน HTML tag แตขอความนนจะยงคงอยและแสดงออกมาตามตนฉบบได แตหากตองการคด tag ตางๆ ทงทตรงกบภาษา HTML และ PHP ออกจากขอความ จะใชฟงกชน strip_tags( ) น ตวอยางเชน strip_tags("<u>สำคญมาก โปรดอาน</u>") จะไดผลเปนขอความ "สำคญมาก โปรดอาน"

สำหรบ argument ตวทสอง allowable_tags จะกำหนด tag บาง tag ทอนญาตใหคงไวไดโดยไมคดออก เชน strip_tags($msg,"<p><u>")

ตวอยาง<?php$text = '<p>Test paragraph.</p><!-- Comment --><u>Other text</u>';

echo strip_tags($text);

echo "\n\n-------\n";

// allow <p> and <u>echo strip_tags($text, '<p><u>');?>

จะไดผลลพธTest paragraph.

Other text

-------<p>Test paragraph.</p>

<u>Other text</u></body>

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 31: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

121

4 ฟงกชนทเกยวของกบชนดขอมลและการมอยของตวแปร • boolean isset(mixed var )

เปนฟงกชนทใหผลเปน Boolean แสดงวาตวแปร var ทอยใน argument นนถกสรางขนแลวหรอไม เชน if (isset($uname)) { … } เปนคำสงตรวจสอบวามตวแปร $uname ถกสรางขนแลวหรอไม

• void unset ( mixed var [, mixed var [, mixed ...]])

เปนฟงกชนทใชยกเลกตวแปร var ทกำหนดใน argument เชน unset($uname) หากใชกบตวแปร array สามารถใชยกเลกไดทง element ใน array และยกเลกตวแปร array ทงตว

หากตองการยกเลกตวแปร array ทงตวจะระบชอตวแปร array เทานน แตหากตองการยกเลกบาง element จะตองระบ index/key ดวย เชน

<?unset($basket[5]); // unset array element// unset element of multidimensional array unset($prodList['JX93209']['stock'][1]); unset($basket); // unset array variable?>

กลมฟงกชนสำหรบการตรวจสอบชนดขอมลไดแก• string gettype(mixed var)

จะไดรบขอความแสดงชนดขอมลของตวแปรทระบใน parameter ขอความทเปนผลลพธไดแก "boolean" "integer" "double" "string" "array" "object" "resource" "NULL"

• boolean is_int(mixed var )

• boolean is_float(mixed var )

• boolean is_string(mixed var )

• boolean is_array (mixed var )

• boolean is_object(mixed var )

เปนฟงกชนทตรวจสอบวาตวแปร argument เปนชนดขอมลทระบหรอไมโดยไดรบผลเปน Boolean โดยจะเปน true หากชนดของขอมลใน argument ตรงกบชนดขอมลของฟงกชนนนๆ

WEB PROGRAMMING Using PHP. and MySQL.

Page 32: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

122122122122

5 กลมฟงกชนอนๆ ทมในภาษา PHPฟงกชนในภาษา PHP ยงมอกมากมายซงแบงเปนกลมตางๆ ถงมากกวา 120 กลมฟงกชน ซง

เปนฟงกชนทใชเฉพาะแตละดาน เชน• กลมฟงกชนเกยวกบการตดตอระบบฐานขอมล (Database Interface API.) แยกตาม

แตละระบบฐานขอมล

• กลมฟงกชนในการสรางไฟลขอมลชนดตางๆ เชน PDF, flash movie, รปภาพใน image file format ตางๆ, data compression .ZIP เปนตน

• การตดตอดวย communication protocol เชน TCP, socket, YP/NIS, SNMP, SSL. และบรการอนๆ บนเครอขาย (network services) เชน POP, SMTP, IMAP, FTP, LDAP, IRC, บรการเกยวกบ e-commerce เชน Cybercash payment, Verisign Payflow Pro, CCVS credit card processing เปนตน Search engine, Information Retrieval เชน Z39.50

• การตดตอกบ Operating system API หรอ web server เฉพาะของระบบเชน COM/.NET, win32API บน Microsoft Windows Server, Apache web server, Netscape/SunONE, POSIX, API ทใช system resource ประเภทตางๆ Process control, Semaphore, Shared Memory and IPC, การทำงานรวมกบ Java

• ฟงกชนเกยวกบ XML/DOM , RSS., SOAP, WDDX., XSL, XSLT

• ฟงกชนทเกยวกบการคำนวณทางคณตศาสตรทซบซอนและแมนยำ

• ฟงกชนเกยวกบ World Wide Web เชน MIME type, HTTP, URL encoding, stream

• การประมวลผลดานขอความ เชน spell checking, Hashing

• ฟงกชนทเกยวกบ hardware เชน Direct IO, Printer

ฟงกชนในแตละกลมสามารถศกษาไดจากคมอของ PHP (PHP manual) ทเปนคมออเลกทรอนกสซงสามารถ download ไดจากเวบไซตของ PHP คอ http://www.php.net

บทท 3

ฟงกชนมาตรฐานของภาษา PHP.

Page 33: p บทที่ 3 ฟังก์ชันมาตรฐานในภาษา PHPbls.buu.ac.th/~athitha/321370/2552/cs/PHP-Book-CH3-PHP...(3.5 หารด วย 2 ได ผลจำนวนเต

123

6 สรปทายบทในบทท 3 นไดกลาวถงฟงกชนมาตรฐานทไดกำหนดไวในภาษา PHP ซงมการแบงออกเปนก

ลมฟงกชนประเภทตางๆ เปนจำนวนมาก โดยฟงกชนในบางประเภทจะตองกำหนดในไฟล php.ini ซงเปน configuration file ใหนำฟงกชนเหลานน load เขามาทำงานกบ PHP engine แตฟงกชนบางกลมจะถกกำหนดใหทำการ load เปนมาตรฐานอยแลว

ฟงกชนตางๆ ไดถกกลาวถงรายละเอยดในบางฟงกชนทเปนฟงกชนทจะถกใชในงานตางๆ ไดโดยทวไป โดยมกลมประเภทฟงกชนทไดกลาวถงรายละเอยดในบทนไดแก

• ฟงกชนคำนวณทางคณตศาสตรทดำเนนการเกยวกบตวเลข ซงยงแบงออกเปนกลมยอยคอ กลมฟงกชนคำนวณทางคณตศาสตรทวไป กลมการปดเศษตวเลข กลมฟงกชนตรโกณ กลมการแปลงหนวยเลข กลมการสมคาตวเลข และกลมการทดสอบนพจนตวเลข

• ฟงกชนเกยวกบขอมลชนด array มกลมยอยไดแก กลมการกำหนดคาขอมล array กลมทเกยวกบ key/index และตวชภายใน array กลมฟงกชนการเลอกและคนหาขอมล กลมการจดเรยงขอมล กลมการคำนวณและประมวลผล กลมการแยกและรวมขอมล และกลมการเขาถงขอมล

• ฟงกชนเกยวกบขอมล string มกลมยอยไดแก กลมทใหขอมลจากขอความ กลมการแสดงผล กลมการเปรยบเทยบ และคนหา กลมการแยกขอความ กลมการแปลงและเขารหสขอความ

• ฟงกชนทเกยวกบชนดขอมลและการมอยของตวแปรในหวขอสดทายไดกลาแนะนำชอกลมประเภทของฟงกชนอนๆ ทมอยในภาษา PHP เพอให

สามารถเขาไปศกษาเพมเตมเมอตองการใชประโยชนไดตอไป

WEB PROGRAMMING Using PHP. and MySQL.