PHP網站開發(fā)實例教程(第3版) 課件 第3、4章 PHP函數與數組、PHP進階_第1頁
PHP網站開發(fā)實例教程(第3版) 課件 第3、4章 PHP函數與數組、PHP進階_第2頁
PHP網站開發(fā)實例教程(第3版) 課件 第3、4章 PHP函數與數組、PHP進階_第3頁
PHP網站開發(fā)實例教程(第3版) 課件 第3、4章 PHP函數與數組、PHP進階_第4頁
PHP網站開發(fā)實例教程(第3版) 課件 第3、4章 PHP函數與數組、PHP進階_第5頁
已閱讀5頁,還剩213頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章PHP函數與數組《PHP網站開發(fā)實例教程(第3版)》學習目標/Target

掌握函數的定義和調用方法,能夠根據需求定義和調用函數。

掌握設置函數參數默認值的方式,能夠給函數的參數設置默認值。

掌握變量的作用域,能夠在函數中正確使用變量。

了解可變函數和匿名函數的概念,能夠說出什么是可變函數和匿名函數。

掌握函數遞歸調用的實現方式,能夠遞歸調用函數。學習目標/Target

掌握字符串函數、數學函數、時間和日期函數的使用方法,能夠使用這些函數對

字符串、數值、時間和日期進行處理。

了解數組的概念,能夠說出數組的分類。

掌握數組的基本使用和遍歷,能夠定義、新增、訪問、刪除和遍歷數組。

掌握數組和字符串的轉換方法,能夠使用explode()函數和implode()函數完成數組

和字符串的轉換。

掌握基本數組函數、數組排序函數和數組檢索函數的使用方法,能夠使用這些函數

完成對數組的合并、分割、排序和檢索。章節(jié)概述/Summary在PHP中,函數用于封裝重復使用的代碼。將代碼封裝成函數后,在實現相同的功能時,直接調用函數即可。使用函數可以避免編寫重復的代碼,不僅可減少工作量,也有利于代碼的維護。數組用于存儲一組數據,從而方便開發(fā)人員對一組數據進行批量處理。利用數組函數可以實現數組的遍歷、排序和檢索等操作。本章將對函數和數組進行詳細講解。目錄/Contents3.13.23.3函數數組常用數組函數函數3.1

先定一個小目標!掌握函數的定義和調用,能夠根據需求定義和調用函數。3.1.1函數的定義和調用在PHP中,開發(fā)人員可以根據功能需求定義函數。語法格式function函數名([參數1,參數2,…]){

函數體}3.1.1函數的定義和調用function是聲明函數使用的關鍵字,不能省略。函數名的命名規(guī)則與標識符相同,且函數名唯一,不能重復。參數是外部傳遞給函數的值,它是可選的,多個參數之間使用英文逗號“,”分隔。函數體是實現指定功能的代碼,在函數體中使用return關鍵字返回函數的返回值。當函數定義好后,若要使用函數,需要對函數進行調用。語法格式函數名([參數1,參數2,…])3.1.1函數的定義和調用定義sum()函數實現求兩個數的和:functionsum($a,$b){$result=$a+$b;return$result; //返回執(zhí)行結果}echosum(23,45); //調用函數,輸出結果:683.1.1函數的定義和調用

先定一個小目標!掌握設置函數參數的默認值的方式,能夠給函數的參數設置默認值。3.1.2設置函數參數的默認值定義函數時為函數的參數設置默認值,調用函數時未傳遞參數,則會使用參數的默認值。設置函數參數默認值的示例代碼:functionsay($p,$con='says"Hello"'){return"$p$con";}echosay('Tom'); //輸出結果:Tomsays"Hello"注意:函數參數設置默認值后,該參數就是可選參數,可選參數必須放在非可選參數的右側。3.1.2設置函數參數的默認值如果需要在函數中修改參數值,可以通過函數參數的引用傳遞來實現,即引用傳參,在參數前添加&符號即可。多學一招:引用傳參引用傳參functionextra(&$var){$var='fruit';}$var='food';extra($var);echo$var; //輸出結果:fruit

先定一個小目標!掌握變量的作用域,能夠在函數中正確使用變量。3.1.3變量的作用域變量只有在定義后才能夠被使用,但這并不意味著定義變量后就可以隨時使用變量。變量只可以在其作用范圍內被使用,這個作用范圍稱為變量的作用域。在函數中定義的變量稱為局部變量,在函數外定義的變量稱為全局變量。函數執(zhí)行完畢后,局部變量會被釋放。3.1.3變量的作用域局部變量和全局變量的使用:functiontest(){$sum=36; //局部變量

return$sum;}$sum=0; //全局變量echotest(); //輸出結果:36echo$sum; //輸出結果:03.1.3變量的作用域如果想在函數執(zhí)行完畢后依然保留局部變量的值,利用static關鍵字在函數中將變量聲明為靜態(tài)變量。定義實現計數功能的函數num():多學一招:靜態(tài)變量靜態(tài)變量functionnum(){

static$i=1;echo$i;++$i;}第1次調用num()函數輸出1,第2次調用num()函數輸出2,依次類推

先定一個小目標!了解可變函數的概念,能夠說出什么是可變函數。3.1.4可變函數在程序中,當需要根據運行時的條件或參數來動態(tài)選擇要調用的函數時,可以使用可變函數??勺兒瘮凳窃谧兞棵暮竺嫣砑有±ㄌ枴?)”,讓其變成函數的形式,PHP會自動尋找與變量值同名的函數,并且嘗試執(zhí)行它。3.1.4可變函數應用可變函數的示例代碼:functionshout(){echo'comeon';}$funcname='shout'; //定義變量,其值是函數的名稱echo$funcname(); //調用可變函數3.1.4可變函數在PHP中,有一些語言構造器的用法和函數相似,但是語言構造器不能通過可變函數的方式調用。常用的語言構造器:腳下留心:區(qū)分語言構造器和函數區(qū)分語言構造器和函數echoprintexitdieincluderequireinclude_oncerequire_onceissetunsetarraylist

先定一個小目標!3.1.5匿名函數了解匿名函數的概念,能夠說出什么是匿名函數。匿名函數就是沒有函數名稱的函數,使用匿名函數無須考慮函數命名沖突的問題。$sum=function($a,$b){ //定義匿名函數

return$a+$b;};echo$sum(100,200); //輸出結果:300在匿名函數中通過use關鍵字使用外部的變量:$c=100;$sum=function($a,$b)use($c){return$a+$b+$c;};echo$sum(100,200); //輸出結果:4003.1.5匿名函數匿名函數還可以作為回調函數使用。回調函數是一種特殊的函數,它可以作為參數傳遞給其他函數,并在特定事件發(fā)生或特定條件滿足時被調用。functioncalculate($a,$b,$func){return$func($a,$b);}echocalculate(100,200,function($a,$b){ //輸出結果:300return$a+$b;});echocalculate(100,200,function($a,$b){ //輸出結果:20000return$a*$b;});匿名函數作為回調函數使用,可以增強函數的靈活性和可擴展性3.1.5匿名函數

先定一個小目標!掌握遞歸調用函數的實現方式,能夠使用遞歸調用函數。3.1.6函數的遞歸調用遞歸是指在一個函數體中調用自身的過程,這種函數稱為遞歸函數。通過函數的遞歸調用演示求4的階乘:functionfactorial($n){if($n==1){return1;}return$n*factorial($n-1);}echofactorial(4); //輸出結果:24當$n不等于1時,遞歸調用當前變量$n乘以factorial($n-1),直到$n等于1時,返回1。factorial()函數的計算過程為4×3×2×1=24。3.1.6函數的遞歸調用

先定一個小目標!掌握字符串函數的使用,能夠使用這用這些函數對字符串進行處理。3.1.7字符串函數在開發(fā)程序時,經常會涉及對字符串的處理。例如,獲取用戶名稱的首字母、判斷用戶輸入數據的長度等。為此,PHP提供了字符串函數,以滿足不同的需求。3.1.7字符串函數常用的字符串函數:函數功能描述strlen(string$string)獲取字符串的長度strpos(string$haystack,string$needle,int$offset=0)獲取指定字符串在目標字符串中首次出現的位置strrpos(string$haystack,string$needle,int$offset=0)獲取指定字符串在目標字符串中最后一次出現的位置str_replace(string$search,string$replace,string$subject,int$count)對字符串中的某些字符進行替換substr(string$string,int$start,int$length=null)獲取字符串的子串3.1.7字符串函數1/2常用的字符串函數:函數功能描述explode(string$separator,string$string,int$limit=PHP_INT_MAX)使用指定的分割符將目標字符串分割,分割結果是數組implode(string$separator,array$array)使用指定的連接符將數組中的元素拼接成字符串trim(string$string,string$characters)去除字符串首尾處的空白字符(或指定的字符串)str_repeat(string$string,int$times)重復字符串strcmp(string$string1,string$string2)比較兩個字符串的大小3.1.7字符串函數2/21.strlen()函數strlen()函數獲取字符串的長度,該函數的返回值類型是整型。在計算長度時,一個英文字符、一個空格的長度都是1;中文字符的長度取決于字符集,在UTF-8字符集中一個中文字符的長度為3,在GBK字符集中一個中文字符的長度為2。echostrlen('abc'); //輸出結果:3echostrlen('中國'); //輸出結果:6echostrlen('PHP'); //輸出結果:53.1.7字符串函數2.substr()函數substr()函數用于獲取字符串的子串,該函數的第1個參數是待處理的字符串,第2個參數是字符串開始截取的位置,第3個參數是截取字符串的長度。substr()函數的第2個參數和第3個參數的使用說明:第2個參數為負數n時,表示從待處理字符的結尾處向左數第|n|個字符開始。省略第3個參數時,表示截取到字符串的結尾。第3個參數為負數n時,表示從截取后的字符串的末尾處去掉|n|個字符。echosubstr('welcome',3); //輸出結果:comeechosubstr('welcome',0,2); //輸出結果:weechosubstr('welcome',3,-1); //輸出結果:comechosubstr('welcome',-4,-1); //輸出結果:com3.1.7字符串函數3.str_replace()函數str_replace()函數用于對字符串中的字符進行替換操作,第1個參數表示目標字符串;第2個參數表示替換字符串;第3個參數表示執(zhí)行替換的字符串;第4個參數是可選參數,用于保存字符串被替換的次數。echostr_replace('e','E','welcome',$count); //輸出結果:wElcomEecho$count; //輸出結果:23.1.7字符串函數4.strcmp()函數strcmp()函數用于比較兩個字符串,根據字符的ASCII值進行比較。該函數的兩個參數是待比較的字符串,函數的返回值有-1、0、1,具體介紹如下。當第一個字符串小于第二個字符串時,返回結果為-1。當第一個字符串等于第二個字符串時,返回結果為0。當第一個字符串大于第二個字符串時,返回結果為1。print_r(strcmp('A','a')); //輸出結果:-1print_r(strcmp('A','A')); //輸出結果:0print_r(strcmp('a','A')); //輸出結果:13.1.7字符串函數

先定一個小目標!3.1.8數學函數掌握數學函數的使用,能夠使用這些函數對數值進行處理。在開發(fā)程序時,經常會涉及對數據的運算。例如,對一個數進行四舍五入、求絕對值等。為此,PHP提供了數學函數,以滿足不同的需求。3.1.8數學函數常用的數學函數:函數功能描述函數功能描述abs(int|float$num)絕對值min(mixed$value,…)返回最小值ceil(int|float$num)向上取最接近的整數pi()返回圓周率的值floor(int|float$num)向下取最接近的整數pow(mixed$num,mixed$exponent)返回數的冪fmod(float$num1,float$num2)返回除法運算的浮點數余數sqrt(float$num)返回數的平方根is_nan(float$num)判斷是否為合法數值round(int|float$num,int$precision=0,int$mode)對浮點數進行四舍五入max(mixed$value,…)返回最大值rand(int$min,int$max)返回隨機整數3.1.8數學函數數學函數的使用方法:echoceil(5.2); //輸出結果:6echofloor(7.8); //輸出結果:7echorand(1,20); //隨機輸出1到20之間的整數3.1.8數學函數

先定一個小目標!3.1.9時間和日期函數掌握時間和日期函數的使用,能夠使用這些函數對時間和日期進行處理。在開發(fā)Web應用程序時,經常會涉及對時間和日期的處理。例如,倒計時、用戶登錄時間、訂單創(chuàng)建時間等。為此,PHP提供了時間和日期函數,以滿足不同的需求。3.1.9時間和日期函數常用的時間和日期函數:函數功能描述time()獲取當前的UNIX時間戳date(string$format,int$timestamp)格式化UNIX時間戳mktime(int$hour,int$minute=null,int$second=null,int$month=null,int$day=null,int$year=null)獲取指定日期的UNIX時間戳strtotime(string$datetime,int$baseTimestamp)將字符串轉化成UNIX時間戳microtime(bool$float)獲取當前UNIX時間戳和微秒數3.1.9時間和日期函數時間和日期函數的使用方法:echotime(); //輸出結果:1687311094echodate('Y-m-d'); //輸出結果:2023-06-21echomicrotime(); //輸出結果:0.391463001687311094echomicrotime(true); //輸出結果:1687311094.39153.1.9時間和日期函數

先定一個小目標!掌握函數的使用,能夠根據需求實現獲取文件擴展名。3.1.10【案例】獲取文件擴展名在實現文件上傳功能時,經常需要判斷用戶上傳的文件類型,以確保其符合要求。例如,某網站只允許上傳JPG格式的商品圖片,因此需要獲取上傳文件的擴展名進行判斷。下面通過自定義函數和字符串函數來實現獲取文件擴展名的功能。

案例需求3.1.10【案例】獲取文件擴展名①創(chuàng)建自定義函數,獲取文件的擴展名,該函數接收一個參數,用于傳遞文件的名稱。②在函數體內使用字符串函數來獲取文件的擴展名。首先使用strrpos()函數獲取文件名中最后一個“.”出現的位置,然后使用substr()函數截取從該位置到字符串末尾的內容,最后使用return關鍵字返回函數的處理結果。③定義變量保存需要處理的文件名,調用自定義函數時傳入該變量,將自定義函數的處理結果保存到另一個變量中。④將處理結果輸出到頁面,并運行程序查看獲取的文件擴展名。

實現思路3.1.10【案例】獲取文件擴展名數組3.2

先定一個小目標!了解數組的概念,能夠說出數組的分類。3.2.1初識數組數組是用于存儲一組數據的集合。數組中的數據稱為數組元素,每個數組元素由鍵(Key)和值(Value)構成。其中,鍵用于唯一標識數組元素;值為數組元素的內容。3.2.1初識數組數組分類索引數組關聯(lián)數組3.2.1初識數組根據數組中鍵的數據類型劃分:鍵的數據類型為整型,索引數組的鍵默認從0開始,并依次遞增,也可以自己指定鍵。鍵的數據類型為字符串型,關聯(lián)數組的鍵和值之間有一定的業(yè)務邏輯。數組分類一維數組三維數組3.2.1初識數組根據數組的維度劃分:數組元素的值是非數組的數據二維數組……數組元素的值是一個一維數組數組元素的值是一個二維數組,也被稱為多維數組

先定一個小目標!掌握數組的基本使用,能夠定義、新增、訪問、刪除數組。3.2.2數組的基本使用1.定義數組使用array()語言構造器和短數組定義法定義數組。(1)array()語言構造器使用array()語言構造器定義數組,將數組元素放在小括號中,鍵和值使用=>連接,數組元素之間使用逗號分隔。定義索引數組時可以省略鍵和=>,PHP會自動為索引數組添加從0開始的鍵。$info=array('id'=>1,'name'=>'Tom');$fruit=array(1=>'apple',3=>'pear');$num=array(1,4,7,9);$mix=array('tel'=>110,'help',3=>'msg');3.2.2數組的基本使用(2)短數組定義法短數組定義法將array()替換為“[]”。$info=['id'=>1,'name'=>'Tom'];$num=[1,4,7,9];定義數組時需要注意以下兩點:數組元素的鍵可以是整型和字符串型,如果是其他類型,則會進行數據類型轉換。浮點型和布爾型會被轉換成整型,NULL會被轉換成空字符串。若數組存在相同的鍵,后面的元素值會覆蓋前面的元素值。3.2.2數組的基本使用2.新增數組元素通過直接值賦給數組變量來新增數組元素。當不指定數組元素的鍵時,鍵默認從0開始,依次遞增。當指定數組元素的鍵時,會使用指定的鍵。如果再次添加數組元素沒有指定鍵,會自動將數組元素的最大整數鍵加1。$arr[]='PHP'; //賦值結果:$arr[0]='PHP'$arr[]='Java'; //賦值結果:$arr[1]='Java' $arr[3]='C語言'; //賦值結果:$arr[3]='C語言'$arr[5]='C++'; //賦值結果:$arr[5]='C++'$arr['sub']='iOS'; //賦值結果:$arr['sub']='iOS'$arr[]='網頁平面'; //賦值結果:$arr[6]='網頁平面'3.2.2數組的基本使用3.訪問數組元素數組元素的鍵是數組元素的唯一標識,通過數組元素的鍵可以獲取該元素的值。$info=['id'=>1,'name'=>'Tom'];echo$info['id']; //輸出結果:1echo$info['name']; //輸出結果:Tom數組元素比較多時,可以使用print_r()或var_dump()輸出數組中的所有元素。$info=['id'=>1,'name'=>'Tom'];print_r($info);//輸出結果:Array([id]=>1[name]=>Tom)var_dump($info);//輸出結果:array(2){["id"]=>int(1)["name"]=>string(3)"Tom"}3.2.2數組的基本使用4.刪除數組元素unset()語言構造器既可以刪除數組中的某個元素,又可以刪除整個數組。$fruit=['apple','pear'];unset($fruit[1]);print_r($fruit); //輸出結果:Array([0]=>apple)unset($fruit);print_r($fruit); //輸出結果:Warning:Undefinedvariable:$fruit…3.2.2數組的基本使用多學一招:判斷數組元素是否存在判斷數組元素是否存在使用數組中的某個元素時,如果元素不存在,運行程序會出現錯誤。使用isset()語言構造器判斷數組元素是否存在,函數返回值true表示元素存在,false表示元素不存在。$fruit=['apple','pear'];unset($fruit[1]);var_dump(isset($fruit[1]));//輸出結果:bool(false)

先定一個小目標!3.2.3遍歷數組掌握數組的遍歷,能夠使用foreach()語句遍歷數組。遍歷數組是指依次訪問數組中的每個元素,通常使用foreach語句遍歷數組。3.2.3遍歷數組語法格式1foreach(待遍歷的數組as$key=>$value){

循環(huán)體}語法格式2foreach(待遍歷的數組as$value){

循環(huán)體}當不需要使用數組的鍵時,可以省略$key使用foreach遍歷數組:$fruit=['apple','pear'];foreach($fruitas$key=>$value){ echo$key.'-'.$value.''; //輸出結果:0-apple1-pear}3.2.3遍歷數組

先定一個小目標!掌握數組和字符串的轉換方法,能夠使用explode()函數和implode()函數完成轉換。3.2.4數組和字符串的轉換在PHP開發(fā)中,靈活使用數組可以提高程序開發(fā)效率。數組和字符串的轉換的兩個操作:將字符串分割成數組將數組合并成字符串通過explode()函數和implode()函數可以實現這兩個操作,下面講解這兩個函數的使用。3.2.4數組和字符串的轉換1.explode()函數explode()函數使用分割符將目標字符串分割,第1個參數是分割符,不能為空字符串;第2個參數是目標字符串;第3個參數是可選參數,表示返回的數組中最多包含的元素個數,該參數的值有3種情況,具體介紹如下:當其為正數m時,返回數組中的m個元素。當其為負數n時,返回除最后的|n|個元素外的所有元素。當其為0時,則把它當作1處理。3.2.4數組和字符串的轉換var_dump(explode('n','banana'));//輸出結果:array(3){[0]=>string(2)"ba"[1]=>string(1)"a"[2]=>string(1)"a"}1使用目標字符串中存在的字符當作分割符var_dump(explode('c','banana'));//輸出結果:array(1){[0]=>string(6)"banana"}2使用目標字符串中不存在的字符當作分割符3.2.4數組和字符串的轉換var_dump(explode('n','banana',2));//輸出結果:array(2){[0]=>string(2)"ba"[1]=>string(3)"ana"}3explode()函數的第3個參數是正數var_dump(explode('n','banana',-2));//輸出結果:array(1){[0]=>string(2)"ba"}4explode()函數的第3個參數是負數var_dump(explode('n','banana',0));//輸出結果:array(1){[0]=>string(6)"banana"}5explode()函數的第3個參數為03.2.4數組和字符串的轉換2.implode()函數implode()函數用于通過指定的連接符將數組中的元素拼接成字符串,該函數的第1個參數是連接符,第2個參數是待處理的數組。示例代碼$arr=[1,2,3];var_dump(implode(',',$arr)); //輸出結果:string(5)"1,2,3"3.2.4數組和字符串的轉換

先定一個小目標!掌握數組的使用,能夠根據需求實現訂貨單。3.2.5【案例】訂貨單實現訂貨單功能,使用數組保存商品信息,計算出每類商品的總價和所有商品的總價,在頁面輸出商品信息、單價和總價。

案例需求379元購買3個799元購買2個589元購買5個主板顯卡硬盤3.2.5【案例】訂貨單①創(chuàng)建order.php,定義數組保存商品的名稱、單價、產地和購買數量。②使用foreach語句遍歷數組,并將其顯示在表格中。③計算每類商品的總價和所有商品的總價,輸出到頁面中。

實現思路3.2.5【案例】訂貨單常用數組函數3.3

先定一個小目標!掌握基本數組函數的使用,能夠使用這些數組完成對數組的合并、分割等操作。3.3.1基本數組函數PHP常用的基本數組函數有count()、range()、array_merge()、array_chunk()等。下面對這些基本數組函數進行講解。3.3.1基本數組函數1.count()函數count()函數計算數組中元素的個數,第1個參數是要計算的數組。第2個參數是計算的維度,默認值0表示計算一維數組的元素個數;1表示計算二維數組的元素個數,依此類推。示例代碼$stu=[['Tom','male',18],['Alice','female',15],['Julia','female',14]];echocount($stu); //輸出結果:3echocount($stu,1); //輸出結果:123.3.1基本數組函數2.range()函數range()函數根據范圍創(chuàng)建數組,通常使用字母或數字指定范圍,第1個參數是起始值;第2個參數是結束值;第3個參數是可選參數,用于定義起始值和結束值的增量,默認為1。示例代碼$arr=range('a','c');print_r($arr);//輸出結果:Array([0]=>a[1]=>b[2]=>c)$data=range(0,10,3);print_r($data);//輸出結果:Array([0]=>0[1]=>3[2]=>6[3]=>9)3.3.1基本數組函數3.array_merge()函數array_merge()函數用于合并一個或多個數組,如果合并的數組中有相同的字符串鍵名,則后面的值覆蓋前面的值;如果合并的數組中有相同的數字鍵名,將之附加到合并結果中。示例代碼$arr1=['food'=>'tea',2,4];$arr2=['a','food'=>'Cod','type'=>'jpg',4];$result=array_merge($arr1,$arr2);//輸出結果:Array([food]=>Cod[0]=>2[1]=>4[2]=>a[type]=>jpg[3]=>4)print_r($result);3.3.1基本數組函數4.array_chunk()函數array_chunk()函數將一個數組分割成多個,第1個參數是待分割數組,第2個參數是分割后每個數組中元素的個數,第3個參數指定是否保留原數組的鍵名,默認值false表示不保留原數組鍵名,分割后數組的鍵從0開始,值為true表示保留待分割數組中原有的鍵名。示例代碼$arr=['one'=>1,'two'=>2,'three'=>3];//輸出結果:Array([0]=>Array([0]=>1[1]=>2)[1]=>Array([0]=>3))print_r(array_chunk($arr,2));//輸出結果:Array([0]=>Array([one]=>1[two]=>2)[1]=>Array([three]=>3))print_r(array_chunk($arr,2,true));3.3.1基本數組函數

先定一個小目標!3.3.2數組排序函數掌握數組排序函數的使用,能夠使用這些函數完成數組排序。通常對數組排序,需要先遍歷數組,再比較數組中的每個元素,最終完成數組的排序。為了方便對數組排序,PHP內置了數組排序函數,不需要遍歷數組即可完成排序。3.3.2數組排序函數常用的數組排序函數:函數功能描述sort(array$array,int$flags)對數組升序排列rsort(array$array,int$flags)對數組降序排列ksort(array$array,int$flags)根據數組鍵名升序排列krsort(array$array,int$flags)根據數組鍵名降序排列asort(array$array,int$flags)對數組升序排列并保持索引關系arsort(array$array,int$flags)對數組降序排列并保持索引關系shuffle(array$array)打亂數組順序array_reverse(array$array,bool$preserve_keys)返回元素順序相反的數組3.3.2數組排序函數使用sort()函數和rsort()函數演示數組排序:$arr=['dog','lion','cat'];sort($arr);print_r($arr); //輸出結果:Array([0]=>cat[1]=>dog[2]=>lion)rsort($arr);print_r($arr); //輸出結果:Array([0]=>lion[1]=>dog[2]=>cat)3.3.2數組排序函數

先定一個小目標!3.3.3數組檢索函數掌握數組檢索函數的使用,能夠使用這些函數完成數組檢索。在程序開發(fā)中,經常需要查詢和獲取數組的鍵和值,常用的數組檢索函數:函數功能描述array_search(mixed$needle,array$haystack,bool$strict=false)在數組中搜索給定的值array_unique(array$array,int$flags=SORT_STRING)移除數組中重復的值array_column(array$array,int|string|null$column_key,int|string|null$index_key=null)返回數組中指定列的值array_keys(array$array)返回數組的鍵名array_values(array$array)返回數組中所有的值array_rand(array$array,int$num=1)從數組隨機取出一個或多個隨機鍵key(array|object$array)從關聯(lián)數組中取得鍵名in_array(mixed$needle,array$haystack,bool$strict=false)檢查數組中是否存在某個值3.3.3數組檢索函數1.in_array()函數in_array()函數檢查數組中是否存在某個值,第1個參數是要檢測的值,第2個參數是要檢測的數組,第3個參數用于設置是否檢測數據類型,默認值false表示不檢測,true表示檢測。$tel=['110','120','119'];var_dump(in_array(120,$tel)); //輸出結果:bool(true)var_dump(in_array(120,$tel,true)); //輸出結果:bool(false)3.3.3數組檢索函數2.array_unique()函數array_unique()函數用于移除數組中重復的值,第1個參數是待操作的數組,第2個參數是比較方式,當省略第2個參數時,默認按照字符串的方式比較數組元素是否重復。$array=[1,2,2,3,4,4];$result=array_unique($array);print_r($result); //輸出結果:Array([0]=>1[1]=>2[3]=>3[4]=>4)3.3.3數組檢索函數

先定一個小目標!掌握數組函數的使用,能夠根據需求實現學生隨機分組。3.3.4【案例】學生隨機分組高一(1)班要舉辦短跑運動會,班級共有30個人,需要將班級中的學生隨機分組(6人一組),下面通過PHP中的數組函數實現隨機分組。

案例需求3.3.4【案例】學生隨機分組①創(chuàng)建run.php文件,該文件用于實現學生隨機分組。②使用array_rand()函數從學生信息數組中隨機取出6個鍵,并使用shuffle()函數打亂數組順序,通過獲取的鍵從學生信息數組中獲取對應的姓名。③輸出隨機分組的信息,查看結果。

實現思路3.3.4【案例】學生隨機分組本章小結本章首先介紹了函數,主要包括函數的定義和調用,可變函數、匿名函數、字符串函數、數學函數、時間和日期函數的使用方法;然后介紹了數組,主要包括數組的基本使用、遍歷數組、數組和字符串的轉換等內容;最后講解了常用的數組函數,主要包括基本數組函數、數組排序函數和數組檢索函數。通過學習本章的內容,讀者應掌握函數和數組的使用方法,以便于在實際開發(fā)中熟練運用。本章小結第4章PHP進階《PHP網站開發(fā)實例教程(第3版)》學習目標/Target

了解錯誤類型,能夠說出常見的錯誤類型。

掌握錯誤信息,能夠在程序中控制錯誤信息。

掌握HTTP請求和HTTP響應的基本構成,能夠查看請求數據和設置響應數據。

掌握表單傳值的方法,能夠使用表單實現前后端數據交互。學習目標/Target

掌握會話技術,能夠使用會話技術記錄用戶在網站的活動。

了解圖像處理,能夠說出常用的圖像處理函數。

掌握目錄和文件操作,能夠使用函數對目錄或文件進行添加、刪除、修改等操作。

了解正則表達式的規(guī)則,能夠說出常用的正則表達式函數。章節(jié)概述/Summary通過對前面各章的學習,讀者已經能夠編寫簡單的PHP程序。但是在實際開發(fā)中,還需要用到PHP中的一些進階知識,如錯誤處理、HTTP、表單傳值、會話技術、圖像處理、目錄和文件操作、正則表達式等,本章將對這些內容進行詳細講解。目錄/Contents4.14.24.3錯誤處理HTTP表單傳值4.4會話技術目錄/Contents4.54.64.7圖像處理目錄和文件操作正則表達式錯誤處理4.1

先定一個小目標!了解錯誤類型,能夠說出常見的錯誤類型。4.1.1錯誤類型PHP中每個錯誤類型都有一個常量與之關聯(lián),還可以使用具體的值表示,常見的錯誤類型:4.1.1錯誤類型常量值描述E_ERROR1致命的運行時錯誤,這類錯誤不可恢復,導致腳本停止運行E_WARNING2運行時警告,僅給出提示信息,腳本不會停止運行E_PARSE4編譯時語法解析錯誤,腳本無法運行E_NOTICE8運行時通知,表示腳本遇到可能會表現為錯誤的情況E_CORE_ERROR16類似E_ERROR,是由PHP引擎核心產生的E_CORE_WARNING32類似E_WARNING,是由PHP引擎核心產生的E_COMPILE_ERROR64類似E_ERROR,是由Zend腳本引擎產生的E_COMPILE_WARNING128類似E_WARNING,是由Zend腳本引擎產生的1/2PHP中每個錯誤類型都有一個常量與之關聯(lián),常量還可以用數值表示,常見的錯誤類型:4.1.1錯誤類型常量值描述E_USER_ERROR256類似E_ERROR,是由用戶在代碼中使用trigger_error()產生的E_USER_WARNING512類似E_WARNING,是由用戶在代碼中使用trigger_error()產生的E_USER_NOTICE1024類似E_NOTICE,是由用戶在代碼中使用trigger_error()產生的E_STRICT2048嚴格語法檢查,確保代碼具有互用性和向前兼容性E_RECOVERABLE_ERROR4096可被捕捉的致命錯誤E_DEPRECATED8192運行時通知,對未來版本中可能無法正常工作的代碼給出警告E_USER_DEPRECATED16384類似E_DEPRECATED,是由用戶在代碼中使用trigger_error()產生的E_ALL32767所有的錯誤、警告和通知2/21.NoticeNotice類型的錯誤通常是代碼不嚴謹造成的。示例代碼//設置時區(qū)的參數值錯誤date_default_timezone_set('aaa');4.1.1錯誤類型2.WarningWarning錯誤相比Notice嚴重。示例代碼//使用include引入不存在的文件include'1234'; //提示信息:Warning:include(1234):Failedtoopenstream…4.1.1錯誤類型使用include語句引入文件前,應先判斷相應文件是否存在,以防止錯誤發(fā)生。3.FatalerrorFatalerror是致命錯誤,一旦發(fā)生這種錯誤,PHP腳本會立即停止運行。示例代碼display();//Fatalerror:UncaughtError:Calltoundefinedfunction…echo'hello';//前一行代碼發(fā)生錯誤,此行代碼不會執(zhí)行4.1.1錯誤類型調用未定義的函數display()時發(fā)生了致命錯誤,輸出語句沒有執(zhí)行。

先定一個小目標!掌握錯誤信息,能夠在程序中控制錯誤信息。4.1.2錯誤信息當程序出錯時,PHP會報錯,報錯的信息稱為錯誤信息??刂棋e誤信息的兩種方式錯誤報告錯誤日志4.1.2錯誤信息修改配置文件error_reporting()函數和ini_set()函數修改配置文件error_log()函數1.錯誤報告(1)修改配置文件在php.ini中默認開啟了錯誤報告。示例配置error_reporting=E_ALLdisplay_errors=Onerror_reporting設置錯誤類型,E_ALL報告所有的錯誤、警告和通知,關閉錯誤報告設置為0。display_errors設置是否顯示錯誤信息,On顯示,Off關閉。4.1.2錯誤信息1.錯誤報告(2)error_reporting()函數和ini_set()函數error_reporting()函數設置錯誤級別常量,ini_set()函數設置php.ini中指定選項的值。示例代碼error_reporting(E_ALL);ini_set('display_errors',On);ini_set()函數第1個參數display_errors,第2個參數值On(也可以使用1代替)表示開啟,關閉設置為Off或0。4.1.2錯誤信息2.錯誤日志(1)通過修改php.ini配置文件記錄錯誤日志在PHP的配置文件php.ini中添加錯誤日志的配置。示例配置error_reporting=E_ALL;log_errors=Onerror_log=C:\web\php_errors.logerror_reporting設置錯誤類型的常量log_errors設置是否記錄日志error_log指定錯誤日志文件的路徑4.1.2錯誤信息2.錯誤日志(2)通過error_log()函數記錄錯誤日志error_log()函數的第1個參數是錯誤信息,第2個參數指定錯誤信息記錄位置,默認記錄到php.ini中error_log配置的日志中,第3個參數用于指定錯誤日志文件的路徑。示例代碼//將錯誤信息記錄到php.ini中error_log配置的日志文件中error_log('errormessagea');//將錯誤信息記錄到錯誤日志文件error_log('errormessageb',3,'C:/web/php.log');4.1.2錯誤信息HTTP4.2

先定一個小目標!了解HTTP的概念,能夠說出瀏覽器與Web服務器的交互過程。4.2.1HTTP概述HTTP由W3C推出,專門用于定義瀏覽器與Web服務器之間數據交換的格式。它不僅可以保證計算機正確快速地傳輸超文本文檔,還可以確定傳輸文檔中的哪部分或優(yōu)先展示哪部分內容。4.2.1HTTP概述瀏覽器與Web服務器交互的過程:4.2.1HTTP概述HTTP在Web開發(fā)中占據重要的位置的原因:①簡單快速:瀏覽器向服務器發(fā)送請求時,只需發(fā)送請求方式和路徑,HTTP服務器的程序規(guī)模小,通信速度較快。②靈活:HTTP允許傳輸任意類型的數據,包括文本、圖像、音頻、視頻等。③無連接:限制每次連接只處理一個請求,節(jié)省傳輸時間。④無狀態(tài):服務器只根據請求處理,不保存瀏覽器的狀態(tài)信息,可以減少服務器端的資源占用。4.2.1HTTP概述

先定一個小目標!了解HTTP請求,能夠說出請求數據的組成。4.2.2HTTP請求用戶通過瀏覽器訪問某個URL地址,瀏覽器會向服務器發(fā)送請求數據。請求數據的組成:4.2.2HTTP請求請求行請求數據的第一行,包含請求方式、請求資源路徑和HTTP版本。請求頭向服務器傳遞附加消息,如瀏覽器可以接收的數據類型、壓縮方法、語言和系統(tǒng)環(huán)境。請求體通過POST方式提交表單,用戶數據在請求體中發(fā)送。數據格式是name=value,多個數據使用&連接。空行用于分隔請求頭和請求體。HTTP請求方式:4.2.2HTTP請求請求方式說明HEAD用于獲取指定資源的響應頭信息而不獲取實際內容GET用于從服務器獲取資源POST用于向服務器提交數據PUT用于向服務器更新或創(chuàng)建資源DELETE用于請求服務器刪除指定的資源OPTIONS用于查詢服務器支持的請求方式

先定一個小目標!了解查看請求數據,能夠說出常見的請求頭字段含義。4.2.3查看請求數據以百度網站為例,查看請求數據:4.2.3查看請求數據常見的請求頭字段和說明:請求頭字段說明Accept瀏覽器支持的數據類型Accept-Charset瀏覽器采用的字符集Accept-Encoding瀏覽器支持的內容編碼方式,通常使用數據壓縮算法Accept-Language瀏覽器所支持的語言,可以指定多個Host瀏覽器想要訪問的服務器主機If-Modified-Since瀏覽器對資源的最后緩存時間Referer瀏覽器指向的Web頁的URLUser-Agent瀏覽器的系統(tǒng)信息,包括使用的操作系統(tǒng)、瀏覽器版本號等Cookie服務器使用Set-Cookie發(fā)送cookie信息Cache-Control瀏覽器的緩存控制Connection請求完成后,希望瀏覽器是保持連接還是關閉連接4.2.3查看請求數據

先定一個小目標!了解HTTP響應,能夠說出響應數據的組成。4.2.4HTTP響應服務器接收到請求數據后,將處理后的數據返回給瀏覽器,返回的數據被稱為響應數據。響應數據的組成:響應行響應數據的第一行,告知瀏覽器本次響應的狀態(tài)。響應頭告知瀏覽器本次響應的基本信息,包括服務程序名,內容的編碼格式、緩存控制等。響應體服務器返回給瀏覽器的實體內容。空行用于分隔響應頭和響應體。4.2.4HTTP響應以百度網站為例,查看響應數據:4.2.4HTTP響應HTTP/1.1是協(xié)議版本200是響應狀態(tài)碼OK是狀態(tài)的描述信息響應狀態(tài)碼是服務器對瀏覽器請求處理結果和狀態(tài)的表示,它由3位十進制數組成。根據響應狀態(tài)碼最左邊的數字分類,共分為5個類別,每個類別的具體作用:1xx:成功接收請求,要求瀏覽器繼續(xù)提交下一次請求才能完成整個處理流程。2xx:成功接收請求并已完成整個處理流程。3xx:未完成請求,瀏覽器需要進一步細化請求。4xx:瀏覽器的請求有錯誤。5xx:服務器端出現錯誤。4.2.4HTTP響應常見的響應狀態(tài)碼:狀態(tài)碼字段含義說明200正常瀏覽器請求成功,響應數據正常返回處理結果403禁止服務器理解瀏覽器的請求,但是拒絕處理,通常由服務器上文件或目錄的權限設置導致404找不到服務器中不存在瀏覽器請求的資源500服務器內部錯誤服務器內部發(fā)生錯誤,無法處理瀏覽器的請求4.2.4HTTP響應常見的響應頭字段和說明:響應頭字段說明Server服務器的類型和版本信息Date服務器的響應時間Expires控制緩存的過期時間Location控制瀏覽器顯示哪個頁面Accept-Ranges服務器是否支持分段請求,支持則需給定請求范圍Cache-Control服務器控制瀏覽器如何進行緩存Content-Disposition服務器控制瀏覽器以下載方式打開文件4.2.4HTTP響應1/2常見的響應頭字段和說明:響應頭字段說明Content-Encoding實體內容的編碼格式Content-Length實體內容的長度Content-Language實體內容的語言Content-Type實體內容的類型Last-Modified請求文檔的最后一次修改時間Transfer-Encoding文件傳輸編碼Set-Cookie發(fā)送Cookie相關的信息Connection是否需要持久連接4.2.4HTTP響應2/2

先定一個小目標!掌握設置響應數據的方法,能夠在程序中設置響應數據。4.2.5設置響應數據響應數據由服務器返回給瀏覽器,通常不需要人為干預。但有時開發(fā)者會根據開發(fā)需求,手動更改響應數據,以實現某些特殊功能。在PHP中,通過header()函數設置響應數據。示例代碼//設置響應實體內容類型header('Content-Type:text/html;charset=UTF-8');//設置頁面重定向header('Location:login.php');4.2.5設置響應數據服務器有多種響應的實體內容類型。如果請求的是網頁,響應實體類型就是HTML;如果請求的是圖片,響應實體內容類型就是圖片;如果響應體是文本,可以直接使用echo語句輸出。通過Content-Type字段設置響應的實體內容類型。示例代碼//設定網頁的響應實體內容類型header('Content-Type:text/html;charset=UTF-8');//設定圖片的響應實體內容類型header('Content-Type:image/png');//設定文本的響應實體內容類型header('Content-Type:text/plain');echo'Hello,World!'; //輸出響應實體內容4.2.5設置響應數據在PHP中,使用http_response_code()函數可以設置HTTP響應狀態(tài)碼,輸出響應數據之前,將響應狀態(tài)碼包含在響應數據中。示例代碼http_response_code(200);//設置響應狀態(tài)碼為200http_response_code(404);//設置響應狀態(tài)碼為4044.2.5設置響應數據多學一招:MIMEMIMEMIME是一個通用的內容類型表示方式,其寫法為“大類別/具體類型”。常見的MIME類型:類型含義類型含義text/plain普通文本(.txt)image/gifGIF圖像(.gif)text/xmlXML文檔(.xml)image/pngPNG圖像(.png)text/htmlHTML文檔(.html)image/jpegJPEG圖像(.jpg)表單傳值4.3

先定一個小目標!熟悉表單傳值的方式,能夠說出常用的傳值方式。4.3.1表單傳值方式表單是網頁上輸入信息的區(qū)域,用戶可以在表單中填寫數據。在Web開發(fā)中,經常使用表單完成信息搜索、用戶登錄、用戶注冊等功能。4.3.1表單傳值方式表單的傳值方式有GET和POST兩種,可以通過<form>標簽的method屬性來指定傳值方式。4.3.1表單傳值方式示例代碼<formaction="表單提交地址"method="POST"><!--表單內容--></form>使用GET方式提交表單時的URL:http://localhost/index.php?id=1&type=2

先定一個小目標!掌握超全局變量的使用,能夠使用這些變量接收表單數據。4.3.2接收表單數據使用PHP提供的超全局變量接收表單數據,超全局變量:變量名說明$GLOBALS用于訪問全局作用域中的變量$_SERVER包含當前腳本的請求信息和服務器環(huán)境變量$_SESSION包含當前會話中存儲的數據$_COOKIE包含通過Cookie傳遞給當前腳本的參數$_FILES包含通過HTTPPOST文件上傳方式傳遞給當前腳本的文件信息$_GET接收GET方式提交的數據$_POST接收POST方式提交的數據$_REQUEST接收GET和POST方式提交的數據4.3.2接收表單數據使用超全局變量$_POST接收數據:示例代碼<?phpvar_dump($_POST);?><formaction=""method="POST"><inputtype="text"name="name"value="Tom"><inputtype="submit"value="提交"></form>4.3.2接收表單數據輸出結果:array(1){["name"]=>string(3)"Tom"}

先定一個小目標!掌握表單提交數組值的方法,能夠使用表單提交數組值。4.3.3表單提交數組值表單提交數組值:示例代碼<formaction="表單提交地址"method="POST"><inputtype="checkbox"name="hobby[]"value="basketball">籃球

<inputtype="checkbox"name="hobby[]"value="football">足球

<inputtype="checkbox"name="hobby[]"value="vollyball">排球

<inputtype="submit"value="提交"></form>選擇籃球和足球輸出結果:array(1){["hobby"]=>array(2){[0]=>string(10)"basketball"[1]=>string(8)"football"}}4.3.3表單提交數組值會話技術4.4

先定一個小目標!了解Cookie的概念,能夠說出Cookie在瀏覽器和服務器之間的傳輸過程。4.4.1Cookie簡介Cookie是服務器為了辨別用戶身份而存儲在用戶本地終端上的數據。當用戶第一次通過瀏覽器訪問服務器時,服務器會向瀏覽器響應一些信息,這些信息都被保存在Cookie中。當用戶使用瀏覽器再次訪問服務器時,瀏覽器會將Cookie數據放在請求頭中發(fā)送給服務器。服務器根據請求頭中的Cookie數據判斷該用戶是否訪問過,進而識別用戶的身份。4.4.1Cookie簡介Cookie在瀏覽器和服務器之間的傳輸過程:4.4.1Cookie簡介

先定一個小目標!掌握Cookie的基本使用,能夠創(chuàng)建和獲取Cookie。4.4.2Cookie的基本使用方法1.創(chuàng)建Cookie使用setcookie()函數創(chuàng)建Cookie。4.4.2Cookie的基本使用方法語法格式boolsetcookie(string$name,//Cookie的名稱(必須)

string$value='',//Cookie的值(可選)

int$expire=0,//Cookie的有效期(可選)

string$path='',//Cookie在服務器端的路徑(可選)

string$domain='',//Cookie的有效域名(可選)

bool$secure=false,//指定是否通過安全的HTTPS連接傳輸Cookie(可選)

bool$httponly=false//指定Cookie只能通過HTTP和HTTPS訪問(可選))4.4.2Cookie的基本使用方法示例代碼<?phpsetcookie('name','value');1.在cookie.php文件中使用setcookie()函數創(chuàng)建Cookie2.訪問cookie.php,查看設置Cookie后的響應頭信息3.切換到“Cookies”標簽頁,查看保存的Cookie信息創(chuàng)建Cookie:2.獲取Cookie使用超全局變量$_COOKIE獲取Cookie。4.4.2Cookie的基本使用方法示例代碼var_dump($_COOKIE);//輸出結果:array(1){["name"]=>string(5)"value"}注意:第一次使用setcookie()函數創(chuàng)建Cookie時,$_COOKIE中沒有Cookie數據,只有瀏覽器下次請求并攜帶Cookie,才能通過$_COOKIE獲取到Cookie。多學一招:使用Cookie存儲多個值或數組使用Cookie存儲多個值或數組在Cookie名稱后添加“[]”用于存儲多個值或數組:setcookie('user[name]','tom')

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論