PHP入門教學 - 基本用法 2
那我們接下來繼續講PHP的基本用法 , 本人認為接下要講比較難一點, 但非常重要 , 那我們開始吧~
PHP基本語法
陣列
陣列大家可以想像成是一個很大的空間,能夠放得下無數個盒子(元素,element),每個盒子能夠存任意資料型別的資料(值,value),而每個盒子都只有一把鑰匙(鍵、索引,key),需要打開盒子才能夠取得資料,但這個空間裡面,一把鑰匙只能對應到一個盒子,否則要開盒子時會不知道要開哪一個
陣列種類
一般陣列
<?php
//一般陣列
$array = array ('貓','狗','鳥');
//縮寫如下
$array = ['貓','狗','鳥'];
//等同於
$array = [
0 => '貓' ,
1 => '狗' ,
2 => '鳥'
];
?>
關係型陣列
<?php
//關係型陣列
$array = array (
'cat' => '貓' ,
'dog' => '狗' ,
'bird'=> '鳥'
);
//縮寫如下
$array = [
'cat' => '貓' ,
'dog' => '狗' ,
'bird'=> '鳥'
];
?>
陣列取值
我們會用中括號[key(鍵、索引)]來存取陣列,拿到相對應的值(value)
<?php
$array = ['貓','狗','鳥'];
//等同於
$array = [
0 => '貓' ,
1 => '狗' ,
2 => '鳥'
];
echo $array[1]; //結果 : 狗
?>
<?php
$array = [
'cat' => '貓' ,
'dog' => '狗' ,
'bird'=> '鳥'
];
echo $array['cat']; //結果 : 貓
?>
修改陣列的值
將新的值丟進陣列的key , 就可以修改陣列裡面的值了
<?php
$array = ['貓','狗','鳥'];
//等同於 , 如果沒有key將自動補key , 從0開始
$array = [
0 => '貓' ,
1 => '狗' ,
2 => '鳥'
];
$array[1] = '狗狗';
print_r($array); //結果 : Array ( [0] => 貓 [1] => 狗狗 [2] => 鳥 )
?>
<?php
$array = [
'cat' => '貓' ,
'dog' => '狗' ,
'bird'=> '鳥'
];
$array['cat'] = '貓貓';
print_r($array); //結果 : Array ( [cat] => 貓貓 [dog] => 狗 [bird] => 鳥 )
?>
定義時重複使用索引值
<?php
//陣列之 索引值(key)若有多個相同數值,則僅會保留該數值的最後一筆
$array = [1 =>'aa' , 1 => 'bb' , 2 => 'cc' , 3 => 'dd' , 3 => 'ee', "1" => 'ff'];
print_r($array); //結果 : Array ( [1] => ff [2] => cc [3] => ee )
?>
多維陣列
其實就是陣列裡面再包陣列 , 看起來很複雜 ,但其實規律都一樣 , 注意看觀察每個 key 跟value
下面就是以學生成績來組成的二維陣列範例
<?php
//二維陣列
$score_array = array(
'mark' => array( 'id' => 1, 'number' => 3 , 'english' => 80 , 'chinese' => 88 , 'math' => 90),
'andy' => array( 'id' => 2, 'number' => 2 , 'english' => 68 , 'chinese' => 81 , 'math' => 77),
'eric' => array( 'id' => 3, 'number' => 5 , 'english' => 77 , 'chinese' => 56 , 'math' => 95),
'mary' => array( 'id' => 4, 'number' => 4 , 'english' => 53 , 'chinese' => 88 , 'math' => 80),
'eddie' => array( 'id' => 5, 'number' => 1 , 'english' => 92 , 'chinese' => 92 , 'math' => 70)
);
//縮寫
$score_array = [
'mark' => [ 'id' => 1, 'number' => 3 , 'english' => 80 , 'chinese' => 88 , 'math' => 90],
'andy' => [ 'id' => 2, 'number' => 2 , 'english' => 68 , 'chinese' => 81 , 'math' => 77],
'eric' => [ 'id' => 3, 'number' => 5 , 'english' => 77 , 'chinese' => 56 , 'math' => 95],
'mary' => [ 'id' => 4, 'number' => 4 , 'english' => 53 , 'chinese' => 88 , 'math' => 80],
'eddie' => [ 'id' => 5, 'number' => 1 , 'english' => 92 , 'chinese' => 92 , 'math' => 70]
];
?>
多維陣列取值
假如我想取得eric的英文成績的話如下
小技巧 : 注意看每個key , 然後照著順序填寫
echo $score_array['eric']['english']; // 結果 : 77
依照這個概念 , 再多維的陣列都可以很容易的進行操作了 , 是不是很簡單呢~
迴圈
while迴圈
while語句迴圈執行程式碼塊,直到指定的條件不成立。
while(條件)
{
要迴圈執行的程式碼;
}
<?php
$a=1;
while($a<=10){
echo "<br>輸出數值:".$a;
$a++;
}
// 結果如下:
// 輸出數值:1
// 輸出數值:2
// 輸出數值:3
// 輸出數值:4
// 輸出數值:5
// 輸出數值:6
// 輸出數值:7
// 輸出數值:8
// 輸出數值:9
// 輸出數值:10
?>
do…while迴圈
do…while語句會至少執行一次程式碼,然後檢查條件,就會重複進行迴圈。
do
{
要執行的程式碼;
}
while(條件)
<?php
$a=1;
do{
echo"<br>do...while輸出數值:".$a;
$a++;
}while($a<=10);
// 結果如下:
// do...while輸出數值:1
// do...while輸出數值:2
// do...while輸出數值:3
// do...while輸出數值:4
// do...while輸出數值:5
// do...while輸出數值:6
// do...while輸出數值:7
// do...while輸出數值:8
// do...while輸出數值:9
// do...while輸出數值:10
?>
那我們在測試如果條件不符合的狀態
<?php
$a=1;
do{
echo"<br>do...while輸出數值:".$a;
$a++;
}while($a<=0);
// 結果如下:
// do...while輸出數值:1
?>
說明 : 1 不小於等於 0 , 但是還是會顯示
for迴圈
for(初始值; 條件; 增量){
要執行的程式碼
}
<?php
for($a=1;$a<=10;$a++){
echo "<br/>for輸出數值:".$a;
}
// 結果如下:
// for輸出數值:1
// for輸出數值:2
// for輸出數值:3
// for輸出數值:4
// for輸出數值:5
// for輸出數值:6
// for輸出數值:7
// for輸出數值:8
// for輸出數值:9
// for輸出數值:10
?>
foreach陣列迴圈
foreach($array as $key => $value){
要執行程式碼;
}
一維陣列
<?php
$array = ["one","two","three","four","five"];
foreach($array as $key => $value){
echo "<br/>逐一輸出陣列值:".$key.'=>'.$value;
}
// 結果如下
// 逐一輸出陣列值:0=>one
// 逐一輸出陣列值:1=>two
// 逐一輸出陣列值:2=>three
// 逐一輸出陣列值:3=>four
// 逐一輸出陣列值:4=>five
?>
二維陣列
<?php
$score_array = [
'mark' => [ 'id' => 1, 'number' => 3 , 'english' => 80 , 'chinese' => 88 , 'math' => 90],
'andy' => [ 'id' => 2, 'number' => 2 , 'english' => 68 , 'chinese' => 81 , 'math' => 77]
];
foreach($score_array as $key1 => $val1){
foreach ($val1 as $key2 => $val2) {
echo $key1.'的'.$key2.'是'.$val2.'<br>';
}
}
// 結果如下
// mark的id是1
// mark的number是3
// mark的english是80
// mark的chinese是88
// mark的math是90
// andy的id是2
// andy的number是2
// andy的english是68
// andy的chinese是81
// andy的math是77
?>
說明 : 相同顏色的為相對的值 , 二維陣列就使用兩個foreach去取值
函式的定義
語法格式
//functionName是函式的名字 function functionName() { //這裡寫程式碼 }
有引數、無返回值的函式
<?php
function sayName($name){
echo $name.'你好哦';
}
// 呼叫
sayName('knowhowfarm'); //結果 : knowhowfarm你好哦
?>
有引數、引數有預設值的函式
<?php
function sayFood($food='玉米'){
echo $food.'好吃';
}
// 呼叫
sayFood('炸雞');// 如果傳入引數,就使用傳入的引數 , 結果:炸雞好吃
sayFood();// 如果不傳入引數,直接使用預設值 , 結果:玉米好吃
?>
有引數、有返回值的函式
<?php
function sum($a,$b){
return $a+$b;
}
echo sum(1,2);// 返回值為1+2 = 3 , 結果 : 3
?>
常用的內建函式
如果每次函式都要自己的寫的話也太麻煩了~ , 所以php有很多非常方便的內建函式 , 只要引用後 , 就可以直接返回你想要的資料 , 如 : 日期的處理、陣列的處理、字串的處理等等....
因為php的函式真的太多太多了 , 所以下方我會列出幾個我自己比較常用的內建函式
輸出
echo(); print(); var_dump(); //沒錯~上一章節的介紹的輸出也是函式哦
陣列處理
array_shift(陣列)//從開頭,刪除陣列第一個元素 , 且返回刪除的值 array_unshift(陣列,"hello","world")//從開頭,新增元素 array_pop(陣列)//從結尾,刪除陣列最後一個元素 array_push(陣列,"hello");//從結尾,新增元素 unset(陣列)//銷燬此陣列
陣列操作
array_values(陣列); //取得陣列的所有value , 返回陣列, 且將key改成預設值 array_keys(陣列); //取得陣列的所有key,返回陣列 array_search(要搜尋的值 , 被搜尋的陣列); // 尋找陣列的value , 返回第一個匹配值的key,找不到返回fales in_array(要搜尋的值 , 被搜尋的陣列) //查詢陣列的value , 返回boolean ,找的到true ,找不到 false array_key_exists(要搜尋的值 , 被搜尋的陣列) //查詢陣列的key , 返回boolean ,找的到true ,找不到 false array_column(陣列, 要查詢的key); //查詢陣列(通常為二維陣列)的某個key的所有值 , 返回陣列 array_unique(陣列) //去掉陣列中的重複值,重複的保留第一個值 array_count_values(陣列) //統計陣列值出現的次數 count(陣列) //返回陣列長度
陣列拆分,合併,分解
array_slice(陣列,開始的位置[數字],長度[數字]); //數組中根據條件取出一段值,並返回 array_splice(陣列,開始的位置[數字],長度[數字],其他陣列);//把陣列中的一部分去掉並用其它值取代 array_combine(陣列1,陣列2);//陣列1為key,陣列2為value結合形成新索引陣列【返回索引陣列】 array_merge(陣列1,陣列2,陣列3...);//陣列進行合併,保留鍵值,有重複,後來者居上【返回新陣列】 //array_merge發現有key值相同的,取後者 $arr1+$arr2 //發現有key值相同的,取前者,第二個重複的值丟棄 array_chunk(陣列,2)//分割陣列,把陣列按照【2個為一組】均等分割【返回一個二維陣列】 shuffle(陣列)//隨機的重組陣列,順序變亂【返回新陣列,保留鍵值】
陣列排序
sort(); //由(小到大)排序value , 但是會把原本的key變成預設值 rsort(); //由(大到小)排序value , 但是會把原本的key變成預設值 asort(); //排序value(小到大) , 但要保留key arsort(); //排序value(大到小) , 但要保留key ksort(); //由(小到大)排序key krsort(); //由(大到小)排序key
說明 : 沒有"k",排序按照【value】排序,排序有"a"的表示要保留KEY,有"r"的倒序排
檢查變數
isset(); //檢查變數是否有設置 empty(); //檢查變數是否為空值 is_null(); //檢查變數是否為null
簡單來說,isset()檢查的是「變數」存不存在,而empty()檢查的是變數內的「值」是否為空
HTML類處理
htmlspecialchars($str)//函式把【預定義字元】轉換為【 HTML 實體】,&轉換成& htmlspecialchars_decode($str);//把【HTML實體】轉換成【預定義字元】,&轉換成& strip_tags($html);//去除HTML標籤 nl2br($str)//在$str中的換行/n前插入<br>,因為\n在原始碼可以換行,但是在瀏覽器視窗不行,有這個就可以
字串查詢
strchr(被尋找的字串,目標字母) //此函式會用來在被尋找字串中,從字串開頭開始找出欲尋找的字母(目標字母),並回報該目標字母以後的所有字串。用法與strstr()幾乎相同 strchr(被尋找的字串,目標字母) //此函式會用來在被尋找字串中,從字串結尾開始找出欲尋找的字母(目標字母),並回報該目標字母以後的所有字串。 substr(目標字串,開始位置,擷取長度) //此函式會擷取在目標字串中,從開始位置到指定擷取長度中間的字串(若沒有指定擷取長度,則從起使位置取到最後)
字串查詢範例
$string_example='http://knowhowfarm/2015/06/test.html'; echo strrchr($string_example, "/") // 從尾巴開始搜尋'/'這個符號 // 輸出結果/test.html echo substr(strrchr($string_example, "/"), 1); // 去除掉'/'這個符號,所以從第一個字元開始擷取到最後 // 輸出結果test.html
字串查詢
str_replace(被替換詞 , 替換詞 , 被搜尋字串 , [統計替換次數$num]) 前兩個引數也可為陣列,兩個陣列元素個數相同 //範例 : str_replace("world","knowhowfarm","Hello world!") 結果 : Hello knowhowfarm! strpos($str,"@");//返回 @ 第一次出現的位置 strrpos($str,"@");//返回 @ 最後一次出現的位置 strlen($string);成功則返回字串 $string 的長度 mb_strlen($string,'utf8');//獲取字串$string長度,多位元組的字元被計為 1。
字串處理
strtoupper($str)//字母全轉為大寫【返回全大寫字串】 strtolower()//字母全轉為小寫【返回全小寫字串】 trim($str)// 去除前後空白 implode(連接字 , 陣列) 函數把數組元素組合為一個字符串 //範例 : implode(",",['Hello','World!','Beautiful','Day!']); 結果 : Hello,World!,Beautiful,Day! explode(以這個字切開, 陣列) 函數把字符串分割為數組。 //範例 : explode(" ","Hello world. It's a beautiful day.") 結果 : Array ( [0] => Hello [1] => world. [2] => It's [3] => a [4] => beautiful [5] => day. )
時間處理函式
time();//預設獲取當前時間,【返回時間戳格式】 strtotime('2015-10-10 10:10:10');//指定時間轉換為時間戳【返回時間戳】 date("Y-m-d H:i:s",time());//轉換時間戳為日期格式【返回目標格式的字串】 getdate()//獲取當前時間,【返回一個數組,引數年,月,日等都有】
檔案處理函式
//基礎函式 file_exists($file)//檔案是否存在,【回傳true/false】 filesize($file) //返回檔案的大小【大小位元組/出錯false】 filectime($file)//檔案建立時間【時間戳】 filemtime($file)//檔案修改時間【時間戳】 fileatime($file)//檔案訪問時間【時間戳】 stat($file)//返回檔案的大部分資訊【檔案資訊陣列】 //目錄的基本操作 basename($file)//返回檔名,index.php dirname($file)//返回檔案的路徑,c://php/ pathinfo($file)//返回該檔案路徑的所有資訊 ["dirname"目錄名] ["basename"檔名] ["extension"檔案字尾] copy(檔案原始路徑,新路徑); //複製 unlink($file) //刪除 filesize($file) //統計大小
格式處理
//json json_encode($data);//對資料進行JSON編碼 json_decode($data)//對JSON格式的字串進行解碼 //序列化 serialize()//返回字串,此字串包含了表示 value 的位元組流,可以儲存於任何地方。 unserialize()//對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。
今天的陣列跟迴圈以及函式都非常重要 , 請大家一定要徹底熟悉 💪
留言
張貼留言