燕十八PHP基礎
變數
變數檢測
- bool isset ( mixed $var [, mixed $… ] )— 檢測變數是否設定
注意:一次可以檢測多個變數,有一個變數未設定,則返回false; 如果 var 存在並且值不是 NULL 則返回 TRUE,否則返回 FALSE。
變數型別判斷
- string gettype ( mixed $var ) — 獲取變數的型別
返回值:
“boolean”
“integer”
“double”(由於歷史原因,如果是 float 則返回“double”,而不是“float”)
“string”
“array”
“object”
“resource”
判斷是否是指定型別的變數:is_array,is_bool,is_float(is_double),is_int(is_integer),is_null,is_string,is_object,is_resource
變數型別轉換
最常見的是字串與數字的轉換,或是數字/字串->布林值的轉換。
$a='12avaf1422';
$b=1;
echo $a+$b;//13
$num1=3.14;
$num2=(int)$num1;
var_dump($num1);
echo "<br/>";
var_dump($num2);//int(3)
- empty() — 檢查一個變數是否為空 當var存在,並且是一個非空非零的值時返回 FALSE 否則返回 TRUE.
以下的東西被認為是空的:
“” (空字串)
0 (作為整數的0)
0.0 (作為浮點數的0)
“0” (作為字串的0)
NULL(null值)
FALSE(布林值false)
array() (一個空陣列)
$var; (一個聲明瞭,但是沒有值的變數)
傳值賦值與引用賦值
$num1=1;
$num2=2;
echo $num2;//2
$num2=&$num1;
echo $num2;//1
引用賦值結合變數銷燬unset():
$num1=0;
$num2=&$num1;
unset($num1);
var_dump($num2,$num1);//int(0) NULL
注意:$num1銷燬變數後,$num2值依然存在
動態變數名
$mk='孟珂';
$$mk='裴丹聖';
echo $mk,'love',$$mk;
運算子
算數運算子
整型太大的話,會自動轉換成浮點型:
var_dump(100000000000000000000000);//float(1.0E+23)
取模運算時,結果的正負僅僅取決於被除數的正負:
$a=-10;//換成10試試
$b=3;//換成-3試試
echo $a%$b;
比較運算子
三元運算子
(expr1) ? (expr2) : (expr3)
對 expr1 求值為 TRUE 時的值為 expr2,在 expr1 求值為 FALSE 時的值為 expr3。
$test=1;
$re=$test??'不存在';//PHP7+寫法
$re=$test?:'不存在';// PHP 5.3+普通寫法
echo $re,PHP_EOL;
echo 'hi';
邏輯運算子
x xor y 異或 如果 x 和 y 有且僅有一個為 true,則返回 true
echo( (10 xor 1) ?:'假');//假
- 關於“短路”
// foo() 根本沒機會被呼叫,被運算子“短路”了
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
- 關於運算子優先順序
“||” 比 “or” 的優先順序高
“&&” 比 “and” 的優先順序高
=比 and or 的優先順序高
$e = false || true;
$f = false or true;
var_dump($e, $f);//true false
$g = true && false;
$h = true and false;
var_dump($g, $h);//false true
遞增遞減運算子
遞增或遞減對布林值無效!
字串運算子
.就一個點,我只說一次!
賦值運算子
控制結構
Switch case
注意:必須要使用 break 來阻止程式碼跳入下一個 case 中繼續執行!
do while
do
{
要執行的程式碼;
}
while (條件);
for
for (初始值; 條件; 增量)
{
要執行的程式碼;
}
注意:
上面的初始值和增量引數可為空,或者有多個表示式(用逗號分隔)。
條件:迴圈執行的限制條件。如果為 TRUE,則迴圈繼續。如果為 FALSE,則迴圈結束。
break 和continue 區別
break 在迴圈中作用是結束一個迴圈
continue立即結束本次迴圈,繼續執行下一次迴圈
函式
PHP 的真正威力源自於它的函式!
函式是一段封裝好的程式碼,隨時可呼叫。
定義格式
命名規則和變數命名一樣,但是函式不區分大小寫;
函式的名稱應該提示出它的功能。
函式執行與返回流程
當函式所有語句執行完畢或者碰到return語句時,函式結束,交回執行權。
函式傳參方式
函式內部變數與外界變數無關:
function t($a)
{
$a += 1;
return $a;
}
$a = 1;
t($a);
echo $a;//輸出1
引用傳參(不推薦,因為函式內部的語句影響到了外部的變數,破壞了函式的封裝性):
function t(&$a)
{
$a += 2;
return $a;
}
$b = 1;
t($b);
echo $b;//輸出3
函式作用域
global 關鍵字用於函式內訪問全域性變數。
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; //在PHP5版本下輸出值是15;在PHP7版本下輸出值是10
在PHP7版本中,函式內只能訪問全域性變數,無法對全域性變數的值進行改變!
PHP將所有全域性變數儲存在一個名為$GLOBALS[index]的陣列中。index為 儲存變數的名稱。上面的例項可以寫成這樣:
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
動態呼叫函式
function wel()
{
echo 'welcome';
}
function bad()
{
echo 'bad';
}
$heart = 'wel';
$heart();
時間戳函式
time();
返回當前時間戳
microtime(get_as_float) 函式返回當前 Unix 時間戳的微秒數。
如果 get_as_float 引數設定為 TRUE,則返回浮點數,表示自 Unix 紀元(January 1 1970 00:00:00 格林威治時間(GMT))起精確到微秒的以秒為單位的當前時間.
echo microtime();//0.68480900 1539325171
echo '<hr>';
echo microtime(true);//1539325171.6848
可在程式開頭和結尾分別放一個,兩者相減,用於計算程式執行時間。
時間戳格式化
echo date('Y-m-d,星期l,a h:i:s');//2018-10-12,星期Friday,AM 06:43:21
echo gmdate('Y-m-d,星期l,a h:i:s');//2018-10-12,星期Friday,AM 06:43:21
date(format,timestamp)
gmdate(format,timestamp)
timestamp 可選。規定時間戳。。預設是當前時間和日期
兩個函式日期都是自GMT起。
PHP 5.1.0:有效範圍的時間戳是從 1901 年 12 月 13 日 20:45:54 GMT 星期五 到 2038 年 1 月 19 日 03:14:07 GMT 星期二。5.1.0 之前的版本,在某些系統上(例如 Windows)時間戳被限制在從 01-01-1970 到 19-01-2038。
日期解析函式
mktime(hour,minute,second,month,day,year)
函式返回日期的 Unix 時間戳。Unix 時間戳包含 Unix 紀元(1970 年 1 月 1 日 00:00:00 GMT)與指定時間之間的秒數。
strtotime() 函式用於把人類可讀的字串轉換為 Unix 時間。
strtotime(' today+1day')
checkdate(month,day,year);如果日期是有效的則返回 TRUE,否則返回 FALSE。
Math函式
- abs(x)
返回一個數的絕對值。 - ceil(x)
向上舍入為最接近的整數。
返回的型別仍然是 float,因為 float 值的範圍通常比 integer 要大。 - floor(): 去尾法取整
- fmod(): 浮點數取餘
- pow(): 返回數的n次方
- round(): 浮點數四捨五入
- max(): 求最大值
註釋:如果僅有一個引數且為陣列,max() 返回該陣列中最大的值。如果第一個引數是整數、字串或浮點數,則至少需要兩個引數而 max() 會返回這些值中最大的一個。可以比較無限多個值。
echo max(1, 3, 5, 6, 7);//7
echo max(array(2, 4, 5));//5
- trim(string,charlist)
移除字串兩側的空白字元或其他預定義字元。
$str = "Hello World!";
echo $str . "<br>";//Hello World!
echo trim($str,"Hled!");//o Wor
- ltrim() - 移除字串左側的空白字元或其他預定義字元
- rtrim() - 移除字串右側的空白字元或其他預定義字元
Filesystem函式
- dirname(path)返回路徑中的目錄部分
字串
字串定義方式
單引號,雙引號,
heredoc,nowdoc:
//heredoc
$a='孟珂';
$str1=<<<INTRO
hello world
{$a}you ok?
INTRO;
echo $str1;
echo $str1;//hello world 孟珂you ok?
//nowdoc
$a='孟珂';
$str1=<<<'INTRO'
hello world
{$a}you ok?
INTRO;
echo $str1;//hello world {$a}you ok?
- 相同點:用於定義大段文字;
1.識別符號可以自定義 一般的 有EOT ,EOD EOF 等, 只有保持開始表示符和結束表示符一樣即可。
2.結束表示符必須獨佔一行,且必須頂格寫,不能有空格,最後以 ‘;’ 分號結尾。
3.所有引用的字串中可以包含變數,無需字串連線符。 - 不同點:(同單引號和雙引號的不同點)
轉義
變數解析
速度:單引號不需要分析串內有沒有變數,需要轉義的內容也少,速度更快。
字串常用函式
strlen(string) 函式返回字串的長度。
utf-8編碼,一箇中文佔3個位元組
mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
獲取一個 string 的長度。
encoding 引數為字元編碼。如果省略,則使用內部字元編碼。
echo mb_strlen('孟珂','utf-8');//2
strpos(string,find,start)
函式查詢字串在另一字串中第一次出現的位置。
- 對大小寫敏感。
- 如果沒有找到字串則返回 FALSE。
- 註釋: 字串位置從 0 開始,不是從 1 開始。
- stripos() - 查詢字串在另一字串中第一次出現的位置(不區分大小寫)
- strripos() - 查詢字串在另一字串中最後一次出現的位置(不區分大小寫)
- strrpos() - 查詢字串在另一字串中最後一次出現的位置(區分大小寫)
str_replace(find,replace,string,count)str_replace(find,replace,string,count)
以其他字元替換字串中的一些字元(區分大小寫)。
str_ireplace() 函式執行不區分大小寫的搜尋。
echo str_replace('fuck','**','fuckyoufuck');//**you**
- 如果搜尋的字串是陣列,那麼它將返回陣列。
- 如果搜尋的字串是陣列,那麼它將對陣列中的每個元素進行查詢和替換。
- 如果查詢的是陣列,而替換的是字串,那麼替代字串將對所有查詢到的值起作用。
print_r(str_replace('fuck','***',array('fuck you','fuckyoufuck')));//Array ( [0] => *** you [1] => ***you*** )
- 如果同時需要對陣列進行查詢和替換,並且需要執行替換的元素少於查詢到的元素的數量,那麼多餘元素將用空字串進行替換
$find = array("Hello","world");
$replace = array("B");
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));//Array ( [0] => B [1] => [2] => ! )
查詢元素和替換元素都為陣列時,它倆裡邊的值一一對應。
$find = array("Hello","world");
$replace = array("B",'c');
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));//Array ( [0] => B [1] => c [2] => ! )
strtr(string,from,to)或strtr(string,array) 批量替換字串
echo strtr('hello world',['hello'=>'hi','world'=>'earth']);//hi earth
substr(string,start[,length])
函式返回字串的一部分。
註釋:如果 start 引數是負數且 length 小於或等於 start,則 length 為 0。
length可選。規定被返回字串的長度。預設是直到字串的結尾
explode(separator,string,limit)
把字串打散為陣列。
implode(separator,array)
返回由陣列元素組合成的字串
separator 可選。規定陣列元素之間放置的內容。預設是 “”(空字串)
- str_pad(string,length,pad_string,pad_type)
把字串填充為新的長度。
$str = "Hello World";
echo str_pad($str,30,".");//Hello World...................
註釋:length 必需。規定新的字串長度。如果該值小於字串的原始長度,則不進行任何操作。
- str_repeat(string,repeat)
返回值: 返回被重複的字串。 - str_split(string,length)
把字串分割到陣列中。
返回值: 返回分割後的陣列。
如果 length 小於 1,則 str_split() 函式將返回 FALSE。
如果 length 大於字串的長度,則整個字串將作為陣列的唯一元素返回。
註釋:length 可選。規定每個陣列元素的長度。預設是 1。
陣列
宣告方式
- array()來宣告;
- 是一種複合資料,可以裝下多個值,每個值用不同的鍵來區分。
陣列型別
- 索引陣列:鍵五特殊意義,為純數字
- 關聯陣列 :字串做鍵,一般能體現該單元的內容
- 多維陣列
陣列鍵規則
-
如果不宣告鍵,則從0,1,2遞增來生成鍵
-
如果已經存在某1個或幾個數字鍵,則從最大的數字鍵,遞增生成數字鍵
$arr=array(3=>'a','b');
print_r($arr);//Array ( [3] => a [4] => b )
- 如果鍵宣告重複了,後面的值覆蓋前面的值
$arr=array(3=>'a',3=>'b','c');
print_r($arr);//Array ( [3] => b [4] => c )
運算元組單元
- 增加單元
$arr[]=$value;
或者:
$arr[$key]=$value; - 讀取單元值
$arr[$key] - 修改單元值
$arr[$key]=$value - 刪除單元值
unset[$arr[$key]]
遍歷陣列
foreach($arr as $value){}
或者
foreach($arr as $key=>$value){}
遊標操作
- current() 函式返回陣列中的當前元素的值。
- end() - 將內部指標指向陣列中的最後一個元素,並輸出
- next() - 將內部指標指向陣列中的下一個元素,並輸出
- prev() - 將內部指標指向陣列中的上一個元素,並輸出
- reset() -將內部指標指向陣列中的第一個元素,並輸出
- each() - 返回當前元素的鍵名和鍵值,並將內部指標向前移動
each() 函式在 PHP 7.2.0 中被棄用了。
陣列常用函式
- array_push(array,value1,value2…)
函式向第一個引數的陣列尾部新增一個或多個元素(入棧),
返回值: 返回新陣列的長度。 - 註釋:即使陣列中有字串鍵名,您新增的元素也始終是數字鍵
- 註釋:如果用 array_push() 來給陣列增加一個單元,還不如用 $array[] =,因為這樣沒有呼叫函式的額外負擔
- 註釋:如果第一個引數不是陣列,array_push() 將發出一條警告。這和$var[] 的行為不同,後者會新建一個數組。
- array_pop(array)
函式刪除陣列中的最後一個元素。
返回值: 返回陣列的最後一個值。如果陣列是空的,或者非陣列,將返回 NULL。 - array_unshift(array,value1,value2,value3…)
用於向陣列插入新元素。新陣列的值將被插入到陣列的開頭。
返回值: 返回陣列中新的元素數目。 - array_shift(array)
刪除陣列中第一個元素
返回值: 返回被刪除元素的值,如果陣列為空則返回 NULL - array_key_exists(key,array)
檢查某個陣列中是否存在指定的鍵名
返回值: 如果鍵名存在則返回 true,如果鍵名不存在則返回 false。 - in_array(search,array,type)
搜尋陣列中是否存在指定的值。
返回值:如果給定的值 search 存在於陣列 array 中則返回 true。如果第三個引數設定為 true,函式只有在元素存在於陣列中且資料型別與給定值相同時才返回 true。
如果沒有在陣列中找到引數,函式返回 false。
註釋:如果 search 引數是字串,且 type 引數設定為 true,則搜尋區分大小寫。 - array_merge(array1,array2,array3…)
把一個或多個數組合併為一個數組。
返回值: 返回合併的陣列。
註釋:如果兩個或更多個數組元素有相同的鍵名,則最後的元素會覆蓋其他元素。
註釋:如果您僅向 array_merge() 函式輸入一個數組,且鍵名是整數,則該函式將返回帶有整數鍵名的新陣列,其鍵名以 0 開始進行重新索引。
$a=array(3=>"red",4=>"green");
print_r(array_merge($a));
//Array ( [0] => red [1] => green )
- array_merge_recursive(array1,array2,array3…)
把一個或多個數組合併為一個數組。
返回值: 返回合併的陣列。
註釋: 該函式與 array_merge() 函式的區別在於處理兩個或更多個數組元素有相同的鍵名時。array_merge_recursive() 不會進行鍵名覆蓋,而是將多個相同鍵名的值遞迴組成一個數組。
註釋: 如果您僅僅向 array_merge_recursive() 函式輸入一個數組,結果與 array_merge() 相同,函式將返回帶有整數鍵名的新陣列,其鍵名以 0 開始進行重新索引。
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge_recursive($a1,$a2));
//Array
(
[a] => red
[b] => Array
(
[0] => green
[1] => yellow
)
[c] => blue
)
- sort(array,sortingtype);
對索引陣列按鍵值進行升序排序。
返回值:如果成功則返回 TRUE,否則返回 FALSE。
註釋:本函式為陣列中的單元賦予新的鍵名。原有的鍵名將被刪除。
$cars=array('v'=>"Volvo",'b'=>"BMW",'t'=>"Toyota");
sort($cars);
var_dump($cars);
//array(3) {
[0]=>
string(3) "BMW"
[1]=>
string(6) "Toyota"
[2]=>
string(5) "Volvo"
}
- rsort(array,sortingtype);
對數值(即索引)陣列按鍵值進行降序排序。
返回值:如果成功則返回 TRUE,否則返回 FALSE。 - usort(array,myfunction);
通過使用者自定義的比較函式對陣列進行排序。
返回值: 若成功則返回 TRUE,若失敗則返回 FALSE。
function my_sort($a,$b)
{
if ($a==$b) return 0;
return ($a<$b)?-1:1;
}
$a=array(4,2,8,6);
usort($a,"my_sort");
print_r($a);//Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
-
asort(array,sortingtype);
對關聯陣列按照鍵值進行升序排序。
返回值: 如果成功則返回 TRUE,如果失敗則返回 FALSE。 -
arsort()
函式對關聯陣列按照鍵值進行降序排序。 -
ksort()
函式對關聯陣列按照鍵名進行升序排序。 -
krsort(array,sortingtype);
對關聯陣列按照鍵名進行降序排序。 -
array_diff(array1,array2,array3…);
返回兩個陣列的差集陣列。
返回值: 返回差集陣列,該陣列包括了所有在被比較的陣列(array1)中,但是不在任何其他引數陣列(array2 或 array3 等等)中的鍵值。 -
array_diff_assoc(array1,array2,array3…);
用於比較兩個(或更多個)陣列的鍵名和鍵值 ,並返回差集。
返回值: 返回陣列,該陣列包含所有在 array1 中,但是不在任何其他引數陣列(array2 或 array3 等等)中的鍵名和鍵值。
註釋: 與array_diff()區別在於array_diff()是比較陣列的值,而array_diff_assoc()的比較包括鍵和值。
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
$result=array_diff_assoc($a1,$a2);
print_r($result);
//Array
(
[a] => red
[b] => green
[c] => blue
[d] => yellow
)
-
array_intersect(array1,array2,array3…);
返回兩個或多個數組的交集陣列。
返回值: 返回交集陣列,該陣列包括了所有在被比較的陣列(array1)中,同時也在任何其他引數陣列(array2 或 array3 等等)中的鍵值。 -
array_intersect_assoc(array1,array2,array3…)
用於比較兩個(或更多個)陣列的鍵名和鍵值,並返回交集。
返回值: 返回交集陣列,該陣列包括了所有在被比較的陣列(array1)中,同時也在任何其他引數陣列(array2 或 array3 等等)中的鍵名和鍵值。 -
array_change_key_case(array,case);
將陣列的所有的鍵都轉換為大寫字母或小寫字母。(預設將陣列的鍵轉換為小寫字母。)
返回值: 返回鍵為大寫或小寫的陣列,或者如果 array 非陣列則返回 FALSE。
註釋:如果在執行該函式時