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 實體】,&轉換成&amp

htmlspecialchars_decode($str);//把【HTML實體】轉換成【預定義字元】,&amp轉換成&

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 的值。


今天的陣列跟迴圈以及函式都非常重要 , 請大家一定要徹底熟悉 💪

留言

這個網誌中的熱門文章

網頁入門教材目錄

什麼是HTML?

網頁是怎麼運作的呢?