|
php的基本語法加強(qiáng) Parse : 解析 error : 錯(cuò)誤 syntax : 語法 ? php 可以和 html 混合使用 ? php 的變量的定義使用 //php中,定義一個(gè)變量要以$符號(hào)打頭 $a=890;//我定義了一個(gè)變量, 該變量名叫 $a , 然后給該變量賦了一個(gè) 值890? php 的變量的數(shù)據(jù)類型,是變化的,php變量的數(shù)據(jù)類型是由運(yùn)行時(shí)的上下文決 定? php區(qū)分大小寫 $i = 89; $I=90; $abc=90; $Abc=900; ? php 的變量的名稱,應(yīng)當(dāng)以字母或者下劃線開頭,不要用數(shù)字開頭,也不要用特殊字符開頭 . $3abc=89; php 數(shù)據(jù)類型有哪些 ? 有三大類 1. 基本數(shù)據(jù)類型 1.1 整型 1.2 小數(shù)型(浮動(dòng)數(shù)) 包含單精度和雙精度 1.3 布爾類型 (表示真,和 假) 1.4 字符串 2. 復(fù)合數(shù)據(jù)類型 2.1 數(shù)組(array ) 2.2 對(duì)象 (objec t) 3. 特殊數(shù)據(jù)類型 3.1 null 3.2 資源類型(resource) 37講 整型細(xì)節(jié)說明 更新時(shí)間:2012年11月04日19時(shí)18分 來源: 基本數(shù)據(jù)類型的入門案 例: ? 整型 整數(shù)類型可以表示一個(gè)整數(shù),比如 : $ts=1; $ts=-12; ? 布爾類型 布爾型可以表示真或者假,比如 : $ts=true; $ts=false; ? 小數(shù)類型 小數(shù)類型可以表示一個(gè)小數(shù)(float,doubl e) $ts=1.12 $ts=3.1415926 ? 字符串類型 字符串類型可以表示一個(gè)字符串 $ts=“我是一個(gè)好人 hello ”基本概念: 何為定義一個(gè)變量 <?php $a=90; //相當(dāng)于我們定義了一個(gè)變量 $a,并賦值 90 ?> 什么叫給變量賦值 <?php $a=78; $a=8; //表示用新的值替代 78 $a=”hello”;//表示$a 的類型變化 .?> 整型的細(xì)節(jié)討論 ?在php中一個(gè)整型數(shù)據(jù)可以用十進(jìn)制,也可以用八進(jìn)制和十六 進(jìn)制 比如 : $a = 0123; // 八進(jìn)制數(shù) (是以0開頭 )$a = 0x1A; // 十六進(jìn)制數(shù) 0123 = 3*8的0次方 + 2*8的1次方+ 1*8的二次方 =3*1+2*8+1*64=83 0x1A= A*16的0次方 +1*16的一次方=10+16=26 $a=123=3*10的0次方+2*10的1此方+1*10的二次方=3+20+100=123 ? php的整數(shù)都是有符號(hào)數(shù) .  通過該圖,我們可以看出,php的整數(shù)的二進(jìn)制的最高位表 示符號(hào)? 通過 PHP_INT_SI ZE 可以顯示我們自己的機(jī)器,一個(gè)整數(shù)用幾個(gè)字節(jié)表 示echo PHP_INT_SI ZE; 通過PHP_INT_MAX 可以顯示int 最大的數(shù)有 多少echo PHP_INT_MA X; 請(qǐng)問? 為什么 PHP_INT_MAX是 21474 83647 我們一起推一下 請(qǐng)問, php 的int 型,負(fù)數(shù)最大表示多少 ? 負(fù)數(shù)和正數(shù)一樣大 2的31次方減一 ? 如果一個(gè)整數(shù)的范圍超過了最大范圍,則自動(dòng)變成 float38講 布爾細(xì)節(jié) 浮點(diǎn)數(shù)細(xì)節(jié) 字符串細(xì)節(jié) 算術(shù)運(yùn)算符? 更新時(shí)間:2012年11月06日13時(shí)53分 來源: 學(xué)生的問題 ? $a=2; 問在內(nèi)存中 2是怎樣存 在的 00000000 00000000 00000000 00000010 -> 0*2的0次方+1*2的一次方+..0=0+2=2 $a=-2 問在內(nèi)存中形式 布爾類型 簡(jiǎn)單的說 布爾類型就兩個(gè)值 true, 一個(gè)fal se; 舉例: //布爾類型 $a=true; $b=false ; 布爾值 FALSE 自身 整型值 0 (零) 浮點(diǎn)型值 0.0 (零) 空 字符串, 以及 字符串"0" 不包括任何元素的數(shù)組 不包括任何成員變量的對(duì)象(僅PHP 4.0 適用) 特殊類型 NULL (包括尚未設(shè)定的變量 ) $conn=mysql_connect(“l(fā)ocalhost”,”root”,”root”); if($conn){ echo?ok?; }else{ echo?沒有ok?; } 浮點(diǎn)數(shù)的細(xì)節(jié) 1.浮點(diǎn)數(shù)(也叫雙精度數(shù)或?qū)崝?shù)) 2.浮點(diǎn)數(shù)的字長(zhǎng)和平臺(tái)相關(guān),通常最大值是 1.8e308 并具有 14 位十進(jìn)制數(shù)字的精度 (這個(gè)限制很 重要) ? 精度要從左邊開始的第一個(gè)非0的數(shù)字計(jì)算 . 字符串的細(xì)節(jié) $a=”hello”; 請(qǐng)問 $a 占用了多個(gè)是字節(jié) 5個(gè)字節(jié) 一個(gè)字符串類型可以表示多大的串 ? ?理論上,我們對(duì)字符串大小沒有限制,即只有不超過內(nèi)存就可 . ?我們定義字符串的時(shí)候,可以用單引號(hào),也可以使用 雙引號(hào)區(qū)別如下: $i=90; $user1="hello$i"; $user2='hello$i'; echo '<br/>user1='.$user1 ; echo '<br/>user2='.$user2 ; 從上面案例我們看出, 當(dāng)一個(gè)變量包含在 “”號(hào)中時(shí),會(huì)輸出它的值,而包含在??中是輸出其字符本身 . 案例2 如果字符串是包圍在單引號(hào)(?)中, 除了來處理 ”時(shí),會(huì)輸出 ”外,其它規(guī)則都一樣 php數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換 php的表達(dá)式 所謂表達(dá)式,就是任何有值的東西 . $a=90+89; php的算術(shù)運(yùn)算符 + 、 -、*、 / 、% 39講 算術(shù)運(yùn)算符? 比較運(yùn)算符 邏輯運(yùn)算符 更新時(shí)間:2012年11月08日17時(shí)42分 來源: php的算術(shù)運(yùn)算符 + 、 -、*、 / 、% $a=90; $b=7; if($a%$b==0){ echo '能整除'; }else{ echo '不能整除!'; } ++ 和 – 快速入門: $a=90; $a++; //等價(jià)于 $a=$a+1; echo $a; $b=89; $b--; //等價(jià)于$b=$b-1; echo '<br/>'.$b; 細(xì)節(jié) 我們的++ 和 – 分為前++ 后 ++ , --也分為 前- - 和 后 - - $a=56; $b=$a++; echo $b; echo $a; 對(duì)上面代碼的分析如下: $a=56; //$b=$a++; //等價(jià)于 $b=$a; $a=$a+1; $b=++$a; //等價(jià)于 $a=$a+1; $b=$a; echo $b."||"; //-->$b 57 echo $a; //-->$a 57  左加 += 左減 -= 左乘 *= 左除 /= 左取模 %= $a=90; $a-=90; //$a=$a-90; echo $a; 比較運(yùn)算符  案例: $a=2; $b=2.0 //只有值相等就為true if($a= =$b){ echo?$a==$b?; } //全等,要求$a 和 $b 值和類型要相等 if($a= = =$b){ } 對(duì) != != = 說明 //只有值不相等,則為true if($a!=$b){ echo '$a!=$b'; } //只要值不相等,或者類型不相等,則為true if($a!==$b){ echo '$a!==$b'; } 請(qǐng)編寫一個(gè)程序,該程序可以接收兩個(gè)數(shù)(可以是整數(shù),也可是小 數(shù)),并判斷兩個(gè)數(shù)是大于?小于?還是等于? 對(duì)應(yīng)的案例: <?php $a=123; $b=90; if($a>$b){ echo '$a>$b'; } if($a<$b) { echo '$a<$b'; } if($a==$b){ echo '$a==$b'; } ?> 邏輯運(yùn)算符  要求大家掌握的知識(shí)點(diǎn)有: 搞清每個(gè)邏輯運(yùn)算的規(guī)則 案例 $a=10; $b=7; if($a++>8 || $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; //把結(jié)果填寫 $a=10; $b=7; if($a++>10 && $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; $a=10; $b=7; if($a++>18 && $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; ? 面試題: and && 都表示邏輯與 ,他們的區(qū)別在什么地方 主要體現(xiàn)在優(yōu)先級(jí)上面 and 的優(yōu)先級(jí) and< = <&& or < = < || 配合案例: $e = false || true; $f = false or true; var_dump($e, $f); $e 是 true $f 是 false;..... 40講 三元運(yùn)算符 類型運(yùn)算符 運(yùn)算符優(yōu)先級(jí) 更新時(shí)間:2012年11月11日18時(shí)53分 來源: php基本語法-三元運(yùn)算符 基本語法 表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3 規(guī)則: 如果表達(dá)式1 的運(yùn)算結(jié)果是 true, 則取 表達(dá)式2 的值,否則,取表達(dá)式3的值. 舉例 : <?php $a=90; $b=180; $c=$a>$b? (12-10):"hello,world"; echo 'c=='.$c; ?> php 的字符串運(yùn)算符 案例: $a="hello,world"; $b=123; $c=$b.$a; //$a 具體表示內(nèi)容和 $b 表示內(nèi)容拼接 echo $c; 從上面案例我們看出, 當(dāng)兩個(gè)變量(基本數(shù)據(jù)類型) 用 . 連接的時(shí)候,就表示把他們的內(nèi)容拼接 類型運(yùn)算符(了解) 基本語法是: instanceof?? 用于確定一個(gè) PHP 變量是否屬于某一類 class 的實(shí)例,通常在面向?qū)ο箝_發(fā)中可能用的. class Dog{} class Cat{} //創(chuàng)建一個(gè)對(duì)象 $cat1=new Cat; //var_dump($cat1 instanceof?? Dog); //在實(shí)際開發(fā)中,我們可能需要去判斷某??個(gè)變量是否是某個(gè)類型 if($cat1 instanceof Cat){ echo '$cat1 是一只貓'; } 運(yùn)算符優(yōu)先級(jí)的說明: //****運(yùn)算優(yōu)先級(jí)***** ? 如果將來你們有一個(gè)表達(dá)式很復(fù)雜,建議使用() 來指定其運(yùn)算優(yōu)先級(jí) $a=3; $b=++$a*3; echo $b;  41講 順序控制 分支控制(if ifelse switch) 程序流程圖 更新時(shí)間:2012年11月16日10時(shí)30分 來源: php程序的三大流程控制 ? 順序控制(從上到下,從左到右) $a=7; echo “a=”.a; echo“hello!”; $a++; echo “a=”.a; echo“O(?_?)O”; $a++; echo “a=”+a; 所謂順序控制流程,就是不加控制的流程,默認(rèn)情況,會(huì)按照,順序來執(zhí)行你編寫的代 碼 ? 分支控制 一個(gè)簡(jiǎn)單的定義: 有選擇的來執(zhí)行我們的 代碼.分為 1. 單分支 2. 雙分支 3 多分支 1. 單分支的基本語法結(jié)構(gòu) if(條件表達(dá)式 ){ 語句; //... //.... } 這里我們,這里的條件表達(dá)式不管多復(fù)雜,最總運(yùn)算的結(jié)果就是 true 或者 false; 快速入門: 編寫一個(gè)程序,可以輸入人的年齡,如果該同志 的年齡大于18歲,則輸出 “你年齡大于18,要對(duì) 自己的行為負(fù)責(zé) !” $age=7; if($age>18){ echo '你的年齡大于18'; } 2. 雙分支 基本語法結(jié) 構(gòu) if(條件表達(dá)式 ){ //n多語句; }else{ //n多語句; } 編寫一個(gè)程序,可以輸入人的年齡,如果該同志 的年齡大于18歲,則輸出 “你年齡大于18,要對(duì) 自己的行為負(fù)責(zé)!”。否則 ,輸出”你的年齡不 大 這次放過你了 .” 代碼: $age=4; if($age>18){ echo '你的年齡大于18'; }else{ echo '你的年齡小于18'; } echo '<br/>程序結(jié)束!';  3. 多重分支 基本語法結(jié)構(gòu)是 if(條件表達(dá)式 ){ //n多語句 }else if (條件表達(dá)式 ){ //n 多語句 }else if(條件表示式 ){ //. }//這里可能還有更多的else if else{ } ? 對(duì)上面的結(jié)構(gòu)請(qǐng)注意 : (1) else if 可以有一個(gè),也可以有多 個(gè) (2) else 可以沒有 快速入門案例 : 編寫一個(gè)程序,可以輸入人的年齡,如果該同志 的年齡大于18歲,則輸出 “你年齡大于18,要對(duì) 自己的行為負(fù)責(zé),送入監(jiān)獄”。如果該同志的年 齡大于10歲并且小于等于18,則輸出 “你的年齡 也不小了,把你送少管所.”。其它情況,則輸出 “小孩子,下次注意”。 代碼如下: $age=34;【1】 if($age>18【2】){ echo '你要被送入監(jiān)獄';【3】 }else if($age>10 【4】 && $age<=18【5】){ echo '送入少管所';【6】 }else{ echo '下次注意';【7】 } echo "over";【8】 流程分析圖 :  switch分支語句 基本語法結(jié) 構(gòu) switch(表達(dá)式){ case 常量1: //n多語句; break ; case 常量2: //n多語句 break ; defua l: //n多語句; break ; } ? 請(qǐng)注意: 1. case 語句有一到 多2. defaul 語句可以沒有(根據(jù)自己代碼的業(yè)務(wù)邏 輯) 3. 通常,在case 語句后,要帶break ,表示退出switch 語句 4. 常量的類型 (int, float, 字符串, 布爾型 ) 快速入門案例 : 請(qǐng)編寫一個(gè)程序,該程序 可以接收一個(gè)字符,比如 : a,b,c,d,e,f,g a表示星期一,b表示星期 二 … 根據(jù)用戶的輸入顯 示相依的信息.要求使用 switch 語句完成 $myChar="b"; switch($myCha r){ case "a": echo '今天星期一,猴子穿新衣 '; break ; case "b": echo '今天星期二,猴子當(dāng)小二 '; break ; case "c": echo '今天星期三,猴子爬雪山 '; break ; defau lt: echo '沒有匹配的日期 '; } echo 'okokook'; 一個(gè)案例: $i=“11“; switch ($i){ case 10: echo '10'; case 1.3: echo '11'; break ; defau lt: echo 'hello '; //break ; case 11: echo '12'; break ; } 該案例得出一個(gè)結(jié)論 : //最終的結(jié)論是 : 首先按照case順序進(jìn)行配置,如果一個(gè)都沒有匹配到,則執(zhí)行 default語句的內(nèi)容,直到遇到break,則退出switch Default語句放置的位置對(duì)執(zhí)行的結(jié)果沒有影響 如果$a=”1”,則會(huì)自動(dòng)轉(zhuǎn)化為整型1 42講 循環(huán)控制?(for) 更新時(shí)間:2012年11月19日15時(shí)24分 來源: 學(xué)生的問題: 老師,說一下if語句和switch的區(qū)別,及應(yīng)用場(chǎng)景 ?;卮? 從我們學(xué)習(xí) if 和 switch 分支看,if 對(duì)某個(gè)范圍的判斷,而switch是對(duì)一個(gè)點(diǎn)的判斷, 所以我們可以這樣去選 擇他們: 應(yīng)用場(chǎng)景: 當(dāng)我們 的分支就是幾個(gè)點(diǎn)的時(shí)候(比如判斷坦克的方向),就應(yīng)當(dāng)使用swtich ,如果你的分支是幾個(gè)區(qū)域(范圍)的判斷, 則考慮使用 if ? 循環(huán)控制流程 首先說 for 循環(huán)控制 基本語法結(jié) 構(gòu) for(循環(huán)初值; 循環(huán)的條件; 步長(zhǎng) ){ //n多語句; } 為什么需要循環(huán)控制 ? 問題 : 請(qǐng)輸出9000000句,”你好,北京 ” 這樣一問題: 怎樣讓我們的某段代碼,循環(huán)的執(zhí)行 分析圖 for($i=0;$i<2;$i++){ echo '<br/>你好,北京'; } echo "over";  內(nèi)存圖: 43講 循環(huán)控制?(while dowhile) 打印金字塔案例 更新時(shí)間:2012年11月20日11時(shí)54分 來源: while循環(huán) 基本語法結(jié)構(gòu)是 while(循環(huán)條件 ){ //循環(huán)體 ,語句 } 案例: 使用while來打印 10句”你好北京 ” 代碼: //*****while循環(huán)***** $i=0;//$i循環(huán)控制變量 while($i<10){ echo '<br/>你好北京'.$i; //這里我們對(duì)循環(huán)控制變量,自增 . $i++; } 流程分析圖 :  do..while循環(huán)控制 基本語法結(jié)構(gòu) do{ //循環(huán)體 }while(循環(huán)條件 ); 快速入門: 循環(huán)的顯示 10句,”你好北京 ”;$i=0;【1】//循環(huán)控制變 量 do{ echo '<br/>dowhile你好北京'.$i;【 2】 //對(duì)循環(huán)控制變量修改 $i++;【3】//這里有程序員自己控制步長(zhǎng) .}while($i<10【4】 ); 執(zhí)行的流程圖 :  綜合案例: 要求: 請(qǐng)使用循環(huán)控制語句,輸出一個(gè)空心的菱形 ->兩個(gè)思想 1. 死去活來 2.先易后難 3. 建立自己的函數(shù)庫(kù)和工具庫(kù)(積累 ) * * * * * * * * 但是這個(gè)菱形的層數(shù)可以靈活的變 化.比較困難-------》簡(jiǎn)單化 <---- ----> 案例如下: //打印出金字塔的一半 //死去活來 //外層的for循環(huán)控制層數(shù) for($i=1;$i<=3;$i++){ //內(nèi)層控制每層*的個(gè)數(shù) for($j=1;$j<=$i;$j++){ echo '*'; } echo '<br/>'; } //打印出整個(gè)金字塔 //如果打印3層 // * * -> 1 2個(gè)空格 1個(gè)* (1-1)*2+1=1 // ** *** -> 2 1個(gè)空格 3個(gè)* (2-1)*2+1=3 // *** ***** -> 3 0個(gè)空格 5個(gè)* (3-1)*2+1=5 $n=20; for($i=1;$i<=$n;$i++){ //在打印*前,先打印空格 for($k=1;$k<=$n-$i;$k++){ echo " "; } //內(nèi)層控制每層*的個(gè)數(shù) for($j=1;$j<=($i-1)*2+1;$j++){ echo '*'; } echo '<br/>'; } 請(qǐng)大家打印出一個(gè)空心金字塔 * * * **** 思路: 我們可以這樣考慮,在給每行輸出* 號(hào)的時(shí)候,要有判斷,(該給*號(hào)給*號(hào),該給空格給 空格) 思路肯定分析 : 和一個(gè)空心的菱形 45講 break語句 continue語句 常量 更新時(shí)間:2012年11月23日15時(shí)22分 來源: 循環(huán)相關(guān)的語句-break 基本的概念: 表示結(jié)束當(dāng)前的 for 、 while 、do..while 、switch, 流程, 可以給一個(gè)數(shù)字,表示退出到 第幾層. 快速入門案例 : for($i=0;$i<13;$i++){ echo '$i='.$i."<br/>"; if($i==10){ break ; } } 快速入門的案例 2: $i=0; while(++$i){ switch($i){ case 5: echo "quit at 5<br/>"; break ; case 10: echo "quit at 10<br/>"; break 2; default: break ; } }echo '$i='.$i; 結(jié)果是: quit at 5 quit at 10 $i=10 分析圖: 從上面的案例,我們得到幾個(gè)結(jié)論 : 1. break語句 默認(rèn)跳出 1層 2. break語句 后面帶的數(shù)字,不能超過實(shí)際可以跳出的循環(huán)層數(shù),否則,會(huì)報(bào) fatal error 循環(huán)相關(guān)語句-conti nue 基本概念: continue 用于結(jié)束本次循環(huán)剩余代碼,從新開始新的一次循環(huán)(如果條件為真,就繼續(xù)執(zhí)行), continue 后面也可以帶 數(shù)字,表示從第幾次循環(huán)重新開始 快速入門: for($i=0;$i<13;$i++){ if($i==10){ continue; } echo '$i='.$i."<br/>"; } 結(jié)果 $i=0 $i=1 $i=2 $i=4 $i=5 $i=6 $i=7 $i=8 $i=9 $i=10 $i=11 $i=12 hello 流程  goto語 句 基本概念: 通過goto語句我們可以將程序跳轉(zhuǎn)到指定的地方去執(zhí) 行. goto 標(biāo)簽; 標(biāo)簽: 語句; 快速入門案例 : goto a; echo 'aa'; a: echo 'bb'; 快速入門案例 2 for($i=0,$j=50; $i<100; $i++) { while($j--) { if($j==17) goto end; } } echo "i = $i"; end: echo 'j = 17 '.$i."||".$j; 結(jié)果: j = 17 php中常量 說明: 所謂常量,我們可以理解成就是特殊的變量: 體現(xiàn)在 1. 定義常量前面不需要 $ 2. 常量一旦定義,則不能修改 其值 3. 常量在定義的時(shí)候,就需要它賦初值 . 4. 常量可以通過 define 或者 const 5. 常量的名稱,我們一般說是 全部大寫,然后用下劃 線間隔6. 什么時(shí)候需要使用常量: 在程序中我們不希望某個(gè)值變化,則考慮使用常量,比如圓周率 ,稅率.... 快速入門案例 : <?php //第一種方法 define("TAX_RATE",0.08); echo TAX_RATE; //第二種方法(php5.3) const TAX_RATE2=0.1; echo '-'.TAX_RATE2; ?> 46講 函數(shù)基本概念 函數(shù)快速入門 更新時(shí)間:2012年11月25日18時(shí)08分 來源: 函數(shù)講解 提出一個(gè)問題? 請(qǐng)大家完成這樣一個(gè)需求: ?輸入兩個(gè)數(shù),再輸入一個(gè)運(yùn)算符(+,-,*,/),得到結(jié)果. 如果我們不考慮使用新??的技術(shù),用我們現(xiàn)在的知識(shí)結(jié)構(gòu),完成 <html> </head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <?php //請(qǐng)大家完成這樣一個(gè)需求: //?輸入兩個(gè)數(shù),再輸入一個(gè)運(yùn)算符(+,-,*,/),得到結(jié)果. $num1=34; $num2=90; $oper="-"; //$res表示結(jié)果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '運(yùn)算符號(hào)有誤!'; } echo "計(jì)算結(jié)果是=".$res; ?> </html> 從該代碼分析,我們發(fā)現(xiàn),如果別的頁面也需要這樣的功能,則代碼的復(fù)用性不好--->函數(shù)引出 現(xiàn)在我們使用函數(shù),來快速體驗(yàn)好處,示意圖:  funcs.php (這個(gè)文件,我們定義了一個(gè)函數(shù)) <?php //我們一個(gè)計(jì)算,+ - * / 的代碼集合->函數(shù) //1. function 是一個(gè)關(guān)鍵字 //2. jiSuan 函數(shù)名(由程序員取名) //3. $num1,$num2,$oper 是函數(shù)的參數(shù)列表(形參) function jiSua??n($num1,$num2,$oper){ //$res 表示計(jì)算的結(jié)果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '運(yùn)算符號(hào)有誤!'; } //表示返回一個(gè)結(jié)果. return $res; } ?> func01.php (該文件使用到了我們定??義的函數(shù).) <html> </head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <?php //引入你需要的php文件 require 'funcs.php'; //請(qǐng)大家完成這樣一個(gè)需求: //?輸入兩個(gè)數(shù),再輸入一個(gè)運(yùn)算符(+,-,*,/),得到結(jié)果. $num1=34; $num2=90; $oper="*"; //以后,要計(jì)算結(jié)果,則可以直接調(diào)用函數(shù) $res=jiSuan($num1,$num2,$oper); echo "計(jì)算結(jié)果是=".$res; ?> </html> 討論函數(shù)之細(xì)節(jié),和其運(yùn)行原理 自定函數(shù)的基本語法結(jié)構(gòu) //參數(shù)列表,用處是接受數(shù)據(jù). function 函數(shù)名(參數(shù)列表){ //函數(shù)體;(完成某一個(gè)功能的指令??集合,這個(gè)必須有) //return 語句; (return 語句主要的用處是返回一個(gè)結(jié)果,這個(gè)可以沒有) } 上機(jī)小練習(xí): 上次我們 定義一個(gè)函數(shù),可以打印不同的圖形 function printTest($n,$name){ } 47講 函數(shù)使用 函數(shù)調(diào)用初步理解 更新時(shí)間:2012年11月27日17時(shí)55分 來源: php頁面相互調(diào)用的知識(shí)點(diǎn) 目前我們有這樣一個(gè)需求: (1) a.php 頁面要使用 b.php 定義的函數(shù),我們可以使用 如下指令 require require_once include include_once 舉例 require 的用法 <?php require(?要引入的文件名?); $filePath=”abc.php” require $filePath; require ?要引入的文件名(路徑)? ?> 案例說明: <?php //1. //require 'b.php'; //2. 通過變量引入 //$fileName="b.php"; //require $fileName; //3. require ('b.php'); //這里就是所謂的調(diào)用函數(shù)->怎樣理解函數(shù)的調(diào)用 abc(); echo 'hello iii'; ?> require 和require_once 區(qū)別 這兩個(gè)區(qū)別為,前者遇到即包含文件,后者會(huì)判斷是否已經(jīng)包含過了,如果包含過了,則不再包含文件。一可以節(jié)省資源,二可 以避免重復(fù)定義的錯(cuò)誤。 redeclare: 再次聲明. include: 包含,包括 舉例說明: include和 include_once的區(qū)別 他們的作用和功能都可以把一個(gè)頁面,包含到另外一個(gè)頁面 基本用法 <?php include(?被包含的文件?); include?被包含的文件?; include $filePaht; ?> 區(qū)別: 這兩個(gè)區(qū)別為,前者include遇到即包含文件,后者include_once會(huì)判斷是否已經(jīng)包含過了,如果包含過了,則不再包含文件。 一可以節(jié)省資源,二可以避免重復(fù)定義的錯(cuò)誤。 證明: 再談 include 和 require 區(qū)別 ( 同時(shí) include_once 和 require_once 區(qū)別) 相同的地方就是,都是可以引入別的頁面. 不同的地方是: include 如果出現(xiàn)了錯(cuò)誤,會(huì)繼續(xù)執(zhí)行,require 出現(xiàn)錯(cuò)誤,則會(huì)終止程序. 證明: 小結(jié): 我們應(yīng)當(dāng)使用哪個(gè)? 我們做項(xiàng)目的時(shí)候,基本上使用的 require_once ? 注意我們的requir_once / require ... 應(yīng)當(dāng)放在 php 最前面. 48講 函數(shù)調(diào)用深入理解 函數(shù)使用注意事項(xiàng)? 更新時(shí)間:2012年11月29日15時(shí)23分 來源: 如何理解函數(shù)的調(diào)用過程 <?php //我們一個(gè)計(jì)算,+ - * / 的代碼集合->函數(shù) //1. function 是一個(gè)關(guān)鍵字 //2. jiSuan 函數(shù)名(由程序員取名) //3. $num1,$num2,$oper 是函數(shù)的參數(shù)列表(形參) function jiSuan($num1,$num2,$oper){ //$res 表示計(jì)算的結(jié)果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '運(yùn)算符號(hào)有誤!'; } //表示返回一個(gè)結(jié)果. return $res; } $a=12; $b=45; $type="+"; $res=jiSuan($a,$b,$type); echo "res=".$res; ?> 函數(shù)調(diào)用的流程圖 :  一個(gè)通俗理解圖:  為了加深大家對(duì)函數(shù)調(diào)用的理解我們,舉例(自己調(diào)用自己的案例) <?php function abc($n){ if($n>2){ abc(--$n); }else{ echo '$n='.$n."<br/>"; } } abc(4); ?> 函數(shù)自己調(diào)用自己-》這個(gè)就稱為遞歸調(diào)用.  函數(shù)的深入使用討論 函數(shù)的基本結(jié)構(gòu) function 函數(shù)名(參數(shù)列表){ //函數(shù)體; //return 語句; } ? 參數(shù)列表可以是多個(gè)參數(shù) ? 參數(shù)可以多個(gè),同時(shí),其數(shù)據(jù)類型可以是php語言支持的任意類型 ? 函數(shù)名開頭的字母,以_ 或者 A_Z 或者 a-z ,不要用數(shù)字或者特殊字符開頭 ? 函數(shù)名不區(qū)分大小寫 ,這個(gè)與變量不一樣. function Abc(){} 和 function abc(){} 是同一個(gè)函數(shù). ? 一個(gè)自定義函數(shù)中的變量是局部的,函數(shù)外不生效 案例: function abc3() { $a=45; echo 'a='.$a; } abc3(); echo 'aa='.$a;// 這里會(huì)報(bào)一個(gè)錯(cuò)誤: Undefined variable: a ? 在php中有三種提示 notice : 注意 waring: 警告 error : 錯(cuò)誤 ? 使用global全局變量的時(shí)候,可使用在函數(shù)外的變量 案例,和分析圖 $a=12; function abc3(){ //global $a;//我要在abc3中使用到外層 $a; $a+=45; } abc3(); echo $a; 分析圖:  49講 函數(shù)使用注意事項(xiàng)? 函數(shù)作業(yè)布置 更新時(shí)間:2012年11月30日16時(shí)20分 來源: ? 如果在函數(shù)中,我們不希望使用某個(gè)變量,或者是希望徹底的不再某個(gè)變量,則可以使用 unset(變量名) ; 將該變量徹底 刪除. $a=12; function abc3($a){ unset($a);//表示不再abc3函數(shù)范圍內(nèi),不在使用$a,后面需要全新定義; $a=45; } abc3($a); echo $a; ? 在php函數(shù)中,我們可以給某些參數(shù),賦一個(gè)默認(rèn)的值. 案例說明: function abc($b,$a=2){ $res=$a+$b; return $res; } $e=70; echo abc($e).' ||'; echo abc($e,90); $f=70; echo abc($e,$f); ? php傳遞變量的時(shí)候,默認(rèn)是值傳遞,如果需要引用(地址)傳遞,可以使用 &變量名; 舉例說明:  50講 函數(shù)再回顧 自定義函數(shù) 更新時(shí)間:2012年12月03日15時(shí)01分 來源: 回顧45講49講函數(shù)內(nèi)容,請(qǐng)參考45講到49講筆記內(nèi)容。 函數(shù)分為兩大類 ? 自定義函數(shù) 自己寫的函數(shù) ? 系統(tǒng)函數(shù) php語句本身給你提供,讓你直接使用的函數(shù), php設(shè)計(jì)者認(rèn)為,在項(xiàng)目開發(fā)的過程,很多人都會(huì)用的一下功能,則就直接提供 給你? 比如: 我要取一個(gè)數(shù)的絕對(duì)值? <?php funct myAbs($num){ if($num<0){ return -$num; }else{ return $num; } } ?> 由系統(tǒng)提供. 51講 位運(yùn)算? 更新時(shí)間:2012年12月04日17時(shí)47分 來源: 位(bit)運(yùn)算 二進(jìn)制 所謂二進(jìn)制就是逢二進(jìn)一 (0,1), 因?yàn)槭褂枚M(jìn)制只有 0, 1 兩個(gè)數(shù),簡(jiǎn)單,易于電子方式實(shí)現(xiàn) , 同時(shí),通過0,1 組合可以表 示任意一個(gè)數(shù). ? 二進(jìn)制有三個(gè)重要的概念 1. 原碼 用二進(jìn)制來表示一個(gè)數(shù),這個(gè)碼就是原碼. 1 ------> 原碼 00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5 2. 負(fù)數(shù)的反碼=它的原碼符號(hào)位不變,其它位取反(0->1,1->0) 反碼(正數(shù)的反碼和它的原碼一樣 , 負(fù)數(shù)反碼 是 符號(hào)位不變其它位取反) 補(bǔ)碼(正數(shù)的補(bǔ)碼和它的原碼一樣,負(fù)數(shù)的補(bǔ)碼是 它的反碼+1) 舉例 -1 -1的原碼 10000000 00000000 00000000 00000001 -1的反碼 11111111 11111111 11111111 11111110 -1 的補(bǔ)碼 11111111 11111111 111111111 11111111 3. 在計(jì)算機(jī)運(yùn)算的時(shí)候,都是以補(bǔ)碼的方式來運(yùn)算的 4+5=>計(jì)算機(jī) 4-5=4+(-5) 這句話意思就是,不管一個(gè)數(shù)是正數(shù)還是負(fù)數(shù),都要被轉(zhuǎn)成補(bǔ)碼,然后進(jìn)行運(yùn)算. 位運(yùn)算一覽表  該圖的前面四個(gè)是位運(yùn)算 其運(yùn)算規(guī)則是: 按位與& : 兩位全為,,結(jié)果為1 按位或| : 兩位有一個(gè)為1,結(jié)果為1 按位異或 ^ : 兩位一個(gè)為0,一個(gè)為1,結(jié)果為1 按位取反 : 0->1 ,1->0 看看前面給出的題,是否完成 ~2=? 步驟 : 首先要求出 2的補(bǔ)碼 2是正數(shù) 所以 原碼=反碼=補(bǔ)碼 2 原碼 00000000 00000000 00000000 00000010 ~2 11111111 11111111 11111111 11111101 (補(bǔ)碼)->原碼 ? 負(fù)數(shù)的 原碼-》反碼-》補(bǔ)碼 11111111 11111111 11111111 11111101-> 推出其反碼 (對(duì)補(bǔ)碼-1) 11111111 11111111 11111111 11111100 推出原碼 52講 位運(yùn)算? 更新時(shí)間:2012年12月06日10時(shí)57分 來源: 10000000 00000000 00000000 0000011 -> -3 ~-5=? -5 的 補(bǔ)碼找出來. -5 原碼 10000000 00000000 00000000 00000101 -5 反碼 11111111 11111111 11111111 11111010 -5 補(bǔ)碼 11111111 11111111 11111111 11111011 ~-5取反 00000000 00000000 00000000 00000100 (補(bǔ)碼) 4 2&3=? 2&3 首先要找到 2 和 3的補(bǔ)碼 2 的補(bǔ)碼 00000000 00000000 00000000 00000010 3 的補(bǔ)碼 00000000 00000000 00000000 00000011 2&3 00000000 00000000 00000000 00000010 [補(bǔ)碼 2|3=? 2 的補(bǔ)碼 00000000 00000000 00000000 00000010 3 的補(bǔ)碼 00000000 00000000 00000000 00000011 2|3 00000000 00000000 00000000 00000011 2^3 2 的補(bǔ)碼 00000000 00000000 00000000 00000010 3 的補(bǔ)碼 00000000 00000000 00000000 00000011 2^3 00000000 00000000 00000000 00000001 13&7=? 5|4=? -3^3=? 位移運(yùn)算 在php 中位運(yùn)算有兩種 >> (右移) << (左移) 運(yùn)算的規(guī)則是 : 算術(shù)右移:低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位 算術(shù)左移: 符號(hào)位不變,低位補(bǔ)0 根據(jù)我們前面的規(guī)范,來完成幾個(gè)案例 $a=1>>2; 1 的補(bǔ)碼 00000000 00000000 00000000 00000001 1>>2 00000000 00000000 00000000 00000000 $b=-1>>2; 步驟 -1 的補(bǔ)碼 -1 的原碼 10000000 00000000 00000000 00000001 -1 的反碼 11111111 11111111 11111111 11111110 -1 的補(bǔ)碼 11111111 11111111 11111111 11111111 -1 >> 2 11111111 11111111 11111111 11111111 補(bǔ)碼 結(jié)果 補(bǔ)碼->原碼 反碼 11111111 11111111 11111111 11111110 原碼 10000000 0000000 00000000 00000001 $c=1<<2; 1<<2 1的補(bǔ)碼 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000100 $d=-1<<2; 53講 數(shù)組介紹 數(shù)組的創(chuàng)建 數(shù)組的遍歷 更新時(shí)間:2012年12月07日17時(shí)49分 來源: 10進(jìn)制->2進(jìn)制 7 對(duì) 除 2 數(shù)組(重點(diǎn)) 提出一個(gè)問題? 一個(gè)養(yǎng)雞場(chǎng)有6只雞,它們的體重分別是3kg,5kg,1kg,3.4kg,2kg,50kg 。請(qǐng)問這六只雞的總體重是多少?平均體重是多少? 請(qǐng)你 用現(xiàn)在掌握的技術(shù)編一個(gè)程序。 現(xiàn)在我們使用現(xiàn)有的技術(shù)來解決問題 array01.php $hen1=3; $hen2=5; $hen3=1; $hen4=3.4; $hen5=2; $hen6=50; 如果我們的變量很多,如果我們分別取變量名,顯示程序無法控制. 怎么辦? 我們可以使用一個(gè)新的數(shù)據(jù)類型array 數(shù)組,來統(tǒng)一個(gè)管理這一組數(shù) 什么是數(shù)組 可以用于存放多個(gè)數(shù)據(jù)的數(shù)據(jù)類型,我們稱為數(shù)組 快速體驗(yàn)案例: 用數(shù)組來解決養(yǎng)雞場(chǎng)的問題 //使用數(shù)組來完成案例 $hens[0]=3; $hens[1]=5; $hens[2]=1; $hens[3]=3.4; $hens[4]=2; $hens[5]=50; $hens[6]=30; $allWeight=0; //遍歷整個(gè)數(shù)組 //有時(shí)為了知道某個(gè)數(shù)組共有多少個(gè)元素,可以使用系統(tǒng)函數(shù)count echo "共有".count($hens)."只雞<br/>"; for($i=0;$i<count($hens);$i++){ echo "第".($i+1)."只雞體重=".$hens[$i]."<br/>"; $allWeight+=$hens[$i]; } echo '<br/>總體重是='.$allWeight.'平均體重='.$allWeight/count($hens); 小結(jié): 該案例重點(diǎn)說明數(shù)組基本使用,細(xì)節(jié)后面說 數(shù)組創(chuàng)建 在php中,數(shù)組就是關(guān)鍵字和值的集合, 我們可以這樣創(chuàng)建 ? 創(chuàng)建數(shù)組 $arr[0]=123; $arr[1]=90; $arr[2]=8; 幾個(gè)概念: [0] -> 這個(gè)我們稱為下標(biāo),或者稱為 關(guān)鍵字 $arr[0] -> 這個(gè)稱為數(shù)組的一個(gè)元素. $arr[0]=123; 123 表示該$arr[0]元素對(duì)應(yīng)的值 $arr –》這個(gè)是該數(shù)組的名稱. 在php數(shù)組中,元素存放的值可以是任意數(shù)據(jù)數(shù)據(jù)類型 , 舉例說明: <?php $arr[0]=123; $arr[1]="hello"; $arr[2]=45.6; $arr[3]=true; $arr[4]=null;//即使放入了一個(gè)null,也要占一個(gè)空間 echo "數(shù)組大小".count($arr); //遍歷一下 for($i=0;$i<count($arr);$i++){ echo '<br/>'.$arr[$i]; } ?> ? 創(chuàng)建數(shù)組的第二種方法 基本語法 $數(shù)組名=array(值,.......); 舉例說明: $arr=array(1,90,"helllo",89.5); //遍歷一把 for($i=0;$i<count($arr);$i++){ echo "<br/>".$arr[$i]; } ? 第三種方式創(chuàng)建數(shù)組(在默認(rèn)情況下,我們的元素的下標(biāo),是從0開始給你編號(hào),但是實(shí)際上,也可以自己指定) 基本語法 $arr[?logo?]=”北京”; $arr[?hsp?]=123; .... 或者 $arr=array(”logo”=>”北京”,”hsp”=>123,4=>678); 案例演示: $arr[0]=123; $arr[1]=90; //遍歷 /* for($i=0;$i<count($arr);$i++){ echo '<br/>'.$arr[$i]; }*/ //這個(gè)foreach適用范圍更廣 foreach($arr as $key2=>$val2){ echo $key2."=".$val2."<br/>"; } 54講 數(shù)組的引用 數(shù)組使用細(xì)節(jié)? 更新時(shí)間:2012年12月09日20時(shí)22分 來源: ? 注意事項(xiàng) ?如果我們創(chuàng)建一個(gè)數(shù)組的時(shí)候,沒有給某個(gè)元素指定下標(biāo),php就會(huì)自動(dòng)的用目前最大的那個(gè)個(gè)下標(biāo)值(整數(shù)), 加上一作為該 元素的下標(biāo)(關(guān)鍵字) $arr=array(5=>"logo",567,90); //我要訪問"logo"這個(gè)值 echo $arr[5]; echo "<br/>".$arr[6]; ?如果我們給某個(gè)元素的下標(biāo)一樣,則會(huì)覆蓋原來的值: $arr=array(5=>"logo",567,90); //我要訪問"logo"這個(gè)值 $arr[5]="yes";//替換某個(gè)元素值 echo $arr[5]; echo "<br/>".$arr[6]; ? 如果我們使用true ,false null 作為key, 則應(yīng)當(dāng)怎樣訪問 $arr[true]="hello"; //==> $arr[1] $arr[false]="world";//==> $arr[0] $arr[null]="北京";//==> $arr[null] 或者 $arr[""]; //null<==>"" echo $arr[0]; echo "<br/>".$arr[null]; ? //我們通??梢允褂胮rint_r來顯示這個(gè)數(shù)組情況 print_r($arr); echo "<br/>"; //var_dump可以更加詳細(xì)的顯示數(shù)組的信息 var_dump($arr); ? 訪問數(shù)組的時(shí)候,不要越界比如: $arr=array(56,100,101); echo $arr[2];//數(shù)組越界 echo "hello"; 一維數(shù)組的引用 基本語法: $數(shù)組名[鍵值]; 如果你寫的鍵值不存在,則會(huì)報(bào)告: Notice: Undefined offset 一維數(shù)組使用陷阱 //*****一維數(shù)組引用陷阱 $arr[bar]="hello,world"; echo $arr[bar]; 這樣使用時(shí)危險(xiǎn)!!!! php的數(shù)組可以動(dòng)態(tài)的增長(zhǎng) $a=array(2,3); //這里說明php的數(shù)組是可以動(dòng)態(tài)增長(zhǎng). $a[3]=56; echo $a[2]; php的數(shù)組相關(guān)的函數(shù)說明 ? count 函數(shù) 基本用法是 count($數(shù)組名); 可以統(tǒng)計(jì)該數(shù)組共有多少元素. ? is_array ? print_r 和 var_dump ? explode 對(duì)字符串進(jìn)行分割 案例: $str="北京&順平&天津&宋江&林沖"; //在實(shí)際開發(fā)中,涉及到字符串的拆分,可以考慮 $arr=explode("&",$str); print_r($arr); php數(shù)組遍歷的四個(gè)方法 ? 如果使用 for while do..while 要確定該數(shù)組的下標(biāo)是從 0開始順序排放 $colors = array('red', 'blue', 'green', 'yellow'); //for while do_while //for for($i=0;$i<count($colors);$i++){ echo "<br/>".$colors[$i]; } //while $i=0;//循環(huán)控制變量 while($i<count($colors)){ echo "<br/>".$colors[$i]; $i++; } //do..while $i=0;//循環(huán)控制變量 do{ echo "<br/>".$colors[$i]; $i++; }while($i<count($colors)); //foreach echo "<br/>*********"; foreach($colors as $k=>$v){ echo "<br/>$k=$v"; } 55講 數(shù)組使用細(xì)節(jié)? 數(shù)組運(yùn)算符 數(shù)組作業(yè)評(píng)講? 數(shù)組小結(jié) 更新時(shí)間:2012年12月11日16時(shí)58分 來源: 使用unset函數(shù)可以銷毀某個(gè)元素,也可以銷毀某個(gè)變量,銷毀該元素后,關(guān)鍵字不會(huì)重新組合. $arr[0]=123; $arr[1]=456; $arr[2]="hello"; //比如現(xiàn)在我要?jiǎng)h除 $arr[1] 元素 echo "<br/>**刪除前****"; echo $arr[1]; unset($arr[1]); echo "<br/>**刪除后****"; echo $arr[1]; echo print_r($arr); 數(shù)組運(yùn)算符(了解即可)  $a = array("a" => "apple", "b" => "banana"); $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; //$b數(shù)組的鍵和值加到$a echo "$a + $b result<br/>"; var_dump($c); // "a" => "apple", "b" => "banana" "c" => "cherry" echo "<br/>"; $c = $b + $a; //"a" => "pear", "b" => "strawberry", "c" => "cherry" echo "$b + $a result <br/>"; var_dump($c); 數(shù)組的案例: 為加強(qiáng)大家對(duì)數(shù)組的理解,我們?cè)俳o大家出一個(gè)題,我們一起完成.在運(yùn)動(dòng)會(huì)上,五個(gè)小孩比賽滑輪,他們的滑完100米,分別用 了10s、12s、5.7s、9s、14s,請(qǐng)編寫一個(gè)程序,計(jì)算他們的平均時(shí)間?[array03.php] 時(shí)間保留到小數(shù)點(diǎn)后兩位. <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <h1>請(qǐng)輸入五個(gè)小孩的成績(jī),用空格隔開</h1> <form action="result2.php" method="post"> <input type="text" name="grade"/> <input type="submit" value="開始統(tǒng)計(jì)"/> </form> </body> </html> result2.php <?php //接收用戶提交的學(xué)生的成績(jī)! $grades=$_REQUEST['grade']; //echo 'grade='.$grades; //拆分,對(duì)成績(jī)進(jìn)行分割 $grades=explode(" ",$grades); $allGrades=0; //遍歷 foreach($grades as $k=>$v){ $allGrades+=$v; //隱藏轉(zhuǎn)換 string->float } echo "平均時(shí)間是=".$allGrades/count($grades); ?> 如果我要求把兩個(gè)頁面合并到一起. 56講 排序介紹 冒泡排序 更新時(shí)間:2012年12月13日10時(shí)04分 來源: 數(shù)組的排序 這里我們介紹一些常用的排序方法, 排序是一個(gè)程序員基本功, 所謂排序就是對(duì)一組數(shù)據(jù),按照某個(gè)順序排列的過程。 排序分兩大類: l 內(nèi)部排序 (1) 交換式排序法 ? 冒泡法 基本思想:  案例說明: <?php //簡(jiǎn)單的 $arr=array(0,5,-1); //這是一個(gè)中間變量 $temp=0; //我們要把數(shù)組,從小到大 //外層循環(huán) for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ //說明前面的數(shù)比后面的數(shù)大,就要交換 if($arr[$j]>$arr[$j+1]){ $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } //輸出 print_r($arr); ?>  為了更好使用排序,我們將其封裝成一個(gè)函數(shù):代碼如下 : <?php //簡(jiǎn)單的 //現(xiàn)在我們把冒泡法封裝成函數(shù),利用以后使用 function bubbleSort(&$myarr){ //這是一個(gè)中間變量 $temp=0; //我們要把數(shù)組,從小到大 //外層循環(huán) for($i=0;$i<count($myarr)-1;$i++){ for($j=0;$j<count($myarr)-1-$i;$j++){ //說明前面的數(shù)比后面的數(shù)大,就要交換 if($myarr[$j]>$myarr[$j+1]){ $temp=$myarr[$j]; $myarr[$j]=$myarr[$j+1]; $myarr[$j+1]=$temp; } } } echo "<br/>函數(shù)中的myarr數(shù)組"; print_r($myarr); } $arr=array(0,5,-1); //使用函數(shù)去排序 bubbleSort??($arr); //輸出 print_r($arr); ?> ? 從上面的案例我們可以看出 * 數(shù)組默認(rèn)傳遞的是值,不是地址 57講 選擇排序 插入排序 快速排序 更新時(shí)間:2012年12月14日14時(shí)00分 來源: ? 快速排序法 快速排序法,我們就介紹了一個(gè)思想:  ? 選擇排序法 選擇排序法的案例:  舉例說明: function selectSort(&$arr){ $temp=0; for($i=0;$i<count($arr)-1;$i++){ //假設(shè) $i就是最小的數(shù) $minVal=$arr[$i]; //記錄我認(rèn)為的最小數(shù)的下標(biāo) $minIndex=$i; for($j=$i+1;$j<count($arr);$j++){ //說明我們認(rèn)為的最小值,不是最小 if($minVal>$arr[$j]){ $minVal=$arr[$j]; $minIndex=$j; } } //最后交換 $temp=$arr[$i]; $arr[$i]=$arr[$minIndex]; $arr[$minIndex]=$temp; } } 自己分析流程. ? 插入排序法 排序思想:  //插入排序法(小->大) function insertSort(&$arr){ //先默認(rèn)下標(biāo)為0 這個(gè)數(shù)已經(jīng)是有序 //1. 知道思想->看懂代碼->寫(靈活) for($i=1;$i<count($arr);$i++){ //$insertVal是準(zhǔn)備插入的數(shù) $insertVal=$arr[$i]; //準(zhǔn)備先和$insertIndex比較 $insertIndex=$i-1; //如果這個(gè)條件滿足,說明,我們還沒有找到適當(dāng)?shù)奈恢?/p> while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){ //同時(shí)把數(shù)后移 $arr[$insertIndex+1]=$arr[$insertIndex]; $insertIndex--; } //插入(這時(shí)就給$insertVal找到適當(dāng)位置) $arr[$insertIndex+1]=$insertVal; } } 從效率上看. 冒泡法< 選擇排序法 < 插入排序法 快速排序法.[空間和時(shí)間] 58講 順序查找 二分查找 更新時(shí)間:2012年12月16日20時(shí)58分 來源: 從效率上看. 冒泡法< 選擇排序法 < 插入排序法 快速排序法.[空間和時(shí)間 外部排序 (文件..) 因?yàn)閿?shù)據(jù)量大,必須借助外邊文件來完成. 查找 我們這里給大家介紹 兩種 ? 順序查找 對(duì)某個(gè)數(shù)組,安裝順序,一個(gè)一個(gè)比較,然后找到你要的數(shù)據(jù). 案例: 要求從一個(gè)數(shù)組 $arr=array(46,90,900,0,-1)中查找一個(gè) 數(shù) 34,如果查找則輸出該數(shù)的下標(biāo),如果找不到,則輸出,查無此數(shù) 代碼: //要求從一個(gè)數(shù)組 $arr=array(46,90,900,0,-1)中查找一個(gè) 數(shù) 34,如果查找則輸出該數(shù)//的下標(biāo),如果找不到,則輸出,查無此 數(shù) $arr=array(46,90,900,0,-1,-1); function search(&$arr,$findVal){ $flag=false; for($i=0;$i<count($arr);$i++){ if($findVal==$arr[$i]){ echo "找到了,下標(biāo)為=$i"; $flag=true; //break; } } if(!$flag){ echo '查詢不到'; } } search($arr,-1); ? 二分查找法(必須掌握) 所謂二分查找,它有一個(gè)重要的前提, 該數(shù)組本身已經(jīng)是一個(gè)有序數(shù)組. 如果該數(shù)組不是有序的,則必須先排序再查找  代碼伺候: //二分查找函數(shù) function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){ //當(dāng) $rightIndex>$leftIndex 說明沒有數(shù) //為什么 if($rightIndex<$leftIndex){ echo "找不到該數(shù)"; return ; } //找到中間這個(gè)數(shù) $middleIndex=round(($rightIndex+$leftIndex)/2); //如果大于則,向后面找 if($findVal>$arr[$middleIndex]){ binarySearch($arr,$findVal,$middleIndex+1,$rightIndex); } //如果是小于中間這個(gè)數(shù),則向前面找 else if($findVal<$arr[$middleIndex]){ binarySearch($arr,$findVal,$leftIndex,$middleIndex-1); }else{ echo "找到這個(gè)數(shù) 下標(biāo)是 $middleIndex"; } } 59講 多維數(shù)組 數(shù)組作業(yè)評(píng)講? 更新時(shí)間:2012年12月17日14時(shí)55分 來源: 多維數(shù)組-二維數(shù)組(了解) 二維數(shù)組的基本語法: $arr=array( array(1,2,3), array(5,6,9) ); $arr[0]=array(1,0); 二維數(shù)組,地圖 ... 二維數(shù)組在內(nèi)存中存在的形式: 快速入門案例: 請(qǐng)用二維數(shù)組,輸出如下圖形 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0 //定義一個(gè)二維數(shù)組 $arr=array( array(0,0,0,0,0,0,1), array(0, 0, 1, 0 ,0 ,0,5), array(0 ,2 ,0, 3, 0, 0,90), array(0,0,0,0,0,0,100)); //遍歷二維數(shù)組(行) for($i=0;$i<count($arr);$i++){ //遍歷每行的數(shù)據(jù) for($j=0;$j<count($arr[$i]);$j++){ echo $arr[$i][$j]." "; } echo "<br/>"; } echo "<br/>".$arr[2][3]; 所謂矩陣轉(zhuǎn)置: (行和列互換) 目前有一個(gè)二維數(shù)組 1 2 3 4 5 6 轉(zhuǎn)置 作業(yè)評(píng)講 ? 1( 打印如下圖型: ********* ********* ********* ********* ********* ********* 2( 打印如下圖型: * ** *** **** ***** 3( 打印如下圖型: * *** ***** ******* ********* 2. 空心金字塔 3. 空心菱形 定義一個(gè)函數(shù) function printTest($n,$name){ } view.php <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <form action="homework01.php" method="post"> 請(qǐng)輸入層數(shù):<input type="text" name="layer"/><br/> 請(qǐng)選擇形狀: <select name="shape"> <option value="a">矩形</option> <option value="b">半金字塔</option> <option value="c">金字塔</option> <option value="d">金字塔</option> <option value="e">金字塔</option> </select><br/> <input type="submit" value="打印"/> </form> </html> homework01.php <?php //死去活來 //$n表示層數(shù) $n=$_REQUEST['layer']; //"a"->表示矩形 "b"=>一半金子塔 "c"=>完整的金字塔 $shape=$_REQUEST['shape']; $starNum=5; //swtich function printShape($n,$shape,$starNum=5){ switch($shape){ case "a": for($i=1;$i<=$n;$i++){ for($j=1;$j<=$starNum;$j++){ echo "*"; } //打完一層后,換行 echo "<br/>"; } break; case "b": for($i=1;$i<=$n;$i++){ for($j=1;$j<=$i;$j++){ echo "*"; } echo "<br/>"; } break; case "c": break; } } //調(diào)用 printShape($n,$shape); ?> 1. 已知手掌游戲機(jī)一臺(tái)320元,mp3一臺(tái)260元。 公司舉行抽獎(jiǎng)大會(huì),公司有18人,一等獎(jiǎng)游戲機(jī),二等獎(jiǎng)mp3, 購(gòu)入5臺(tái)游戲機(jī),13臺(tái)mp3。 問總價(jià)為多少,公司實(shí)際平均給每人花費(fèi)了多少錢。(4980,276.6666) <?php $gamerPrice=320; $mp3Price=260; $gamerNum=5; $mp3Num=13; $totalPrice=$gamerPrice*$gamerNum+ $mp3Price* $mp3Num; $avgPrice= $totalPrice/ 18; ?> 1. 跳水比賽,8個(gè)評(píng)委打分。運(yùn)動(dòng)員的成績(jī)是8個(gè)成績(jī)?nèi)〉粢粋€(gè)最高分,去掉一個(gè)最低分,剩下的6個(gè)分?jǐn)?shù)的平均分就是 最后得分。使用一維數(shù)組實(shí)現(xiàn)打分功能。 解題: <?php $arr=array(90,23,89,100,2,5,89,44); //這里有一個(gè)思路,如果只想知道最低分和最高分是多少,則可以排序. //找出給出最低分的裁判 //該函數(shù)可以返回給出最低分的裁判的下標(biāo) function findMin($arr){ //假設(shè)第一個(gè)人就是給出最低分的裁判 $minFen=$arr[0]; $minIndex=0; for($i=1;$i<count($arr);$i++){ //如果下面條件成立,說明$i 裁判給出的成績(jī)更低 if($minFen>$arr[$i]){ $minFe=$arr[$i]; $minIndex=$i; } } return $minIndex; } ?>
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|