- 運算符
- 優先級
結合方向 | 運算符 | 附加信息 |
---|---|---|
無 | clone new | clone 和 new |
左 | [ | array() |
右 | ** | 算術運算符 |
右 | ++ – ~ (int) (float) (string) (array) (object) (bool) @ | 類型和遞增/遞減 |
無 | instanceof | 類型 |
右 | ! | 邏輯運算符 |
左 | * / % | 算術運算符 |
左 | + - . | 算術運算符和字符串運算符 |
左 | << >> | 位運算符 |
無 | < <= > >= | 比較運算符 |
無 | == != === !== <> <=> | 比較運算符 |
左 | & | 位運算符和引用 |
左 | ^ | 位運算符 |
左 | l | 位運算符 |
左 | && | 邏輯運算符 |
左 | ll | 邏輯運算符 |
左 | ?? | 比較運算符 |
左 | ? : | ternary |
右 | = += -= *= **= /= .= %= &= l= ^= <<= >>= | 賦值運算符 |
左 | and | 邏輯運算符 |
左 | xor | 邏輯運算符 |
左 | or | 邏輯運算符 |
- 組合比較符 <=>
$c = $a <=> $b;
這句代碼的意思是
如果$a > $b, $c 的值爲1
如果$a == $b, $c 的值爲0
如果$a < $b, $c 的值爲-1
即:$c = $a > $b ? 1 : ( b ? 0 : -1 );
- "="是右聯的,所以 $a = $b = $c 等同於 b = $c)
- 位運算符
&(按位與),|(按位或),^(按位異或),~(按位取反)
&(按位與):對應位同時爲1時,在&運算後則爲1,否則爲0
|(按位或):對應位有一個爲1時,在|運算後則爲1,同爲0時則爲0
^ (按位異或):對應位不同時爲1時,在^ 運算後爲1,同時爲0時則爲0,同時爲1時^運算後也是0
~(按位取反):$ a+( ~$a)=-1 即 ~a = -(a+1)
原碼:一個整數,按照絕對值大小轉換成的二進制數,稱爲原碼。
8的原碼爲:0000 0000 0000 0000 0000 0000 0000 1000
反碼:將二進制數按位取反,所得的新二進制數稱爲原二進制數的反碼。取反操作指:1變0, 0變1。
8按位取反:1111 1111 1111 1111 1111 1111 1111 0111
補碼:反碼加1稱爲補碼。也就是說,要得到一個數的補碼,先得到反碼,然後將反碼加上1,所得數稱爲補碼。
正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1
反碼加1:1000 0000 0000 0000 0000 0000 000 1001;這樣就得負數的正值的補碼形式。也就是-9了。
例如:
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>"; //8
$mn=$m|$n;
echo $mn."<br>"; //12
$mn=$m^$n;
echo $mn."<br>"; //4
$mn=~$m;
echo $mn."<br>"; //-9
$mn=~$p;
echo $mn."<br>"; //108
註釋:按位&後返回值是沒意義的。 主要是用來判斷$a 是否存在於 $c // 權限用法比較多。
<?php
$my_privilege = 15; // 1+2+4+8 擁有全部權限
$Pri = '';
$privilege_arr = array(8=>'增', 4=>'刪',2=>'改',1=>'查');
foreach($privilege_arr as $k =>$v){
$k & $my_privilege && $Pri .= '我有'.$v.'的權力<br>';
}
echo $Pri;
?>
- Switch 語句
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
case "blue":
echo "你喜歡的顏色是藍色!";
break;
case "green":
echo "你喜歡的顏色是綠色!";
break;
default:
echo "你喜歡的顏色不是 紅, 藍, 或綠色!";
}
?>
- 數組函數
- array()
創建數組。
- range(low,high,step)
返回一個包含從 low 到 high 之間的元素的數組。
如果 low 參數大於 high 參數,則創建的數組將是從 high 到 low。
- compact(var1,var2…)
創建一個包含變量名和它們的值的數組。
任何沒有變量名與之對應的字符串都被略過。
var1 必需。可以是帶有變量名的字符串,或者是一個變量數組。
var2,… 可選。可以是帶有變量名的字符串,或者是一個變量數組。允許多個參數。
<?php
$firstname = "Peter";
$lastname = "Griffin";
$age = "41";
$name = array("firstname", "lastname");
$result = compact($name, "location", "age");
print_r($result);
?>
//Array ( [firstname] => Peter [lastname] => Griffin [age] => 41 )
- array_change_key_case(array,case)
返回帶有小寫字母的鍵的數組,或者返回帶有大寫字母的鍵的數組,或者如果 array 不是一個數組則返回 FALSE。
case可選,可能的值:
CASE_LOWER - 默認值。將數組的鍵轉換爲小寫字母。
CASE_UPPER - 將數組的鍵轉換爲大寫字母。
- array_column(array,column_key,index_key)
返回輸入數組中某個單一列的值。
column_key 必需。需要返回值的列。該參數可以是 NULL,此時將返回整個數組(配合index_key 參數來重置數組鍵的時候,非常管用)。
index_key 可選。作爲返回數組的索引/鍵的列。
$a = array(
array(
'id' => 5698,
'first_name' => 'Peter',
'last_name' => 'Griffin',
),
array(
'id' => 4767,
'first_name' => 'Ben',
'last_name' => 'Smith',
),
array(
'id' => 3809,
'first_name' => 'Joe',
'last_name' => 'Doe',
)
);
$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
/*
Array
(
[5698] => Griffin
[4767] => Smith
[3809] => Doe
)
- key()
返回當前內部指針所指向的數組元素的鍵名。
- array_keys(array,value,strict)
返回數組中所有的鍵名。
value 可選。您可以指定鍵值,然後只有該鍵值對應的鍵名會被返回。
strict 可選。與 value 參數一起使用。可能的值:
true - 返回帶有指定鍵值的鍵名。依賴類型,數字 5 與字符串 "5" 是不同的。
false - 默認值。不依賴類型,數字 5 與字符串 "5" 是相同的。
- array_values()
被返回的數組將使用數值鍵,從 0 開始且以 1 遞增。
- extract(array,extract_rules,prefix)
從數組中將變量導入到當前的符號表。
array 必需。規定要使用的數組。
extract_rules 可選。extract() 函數將檢查每個鍵名是否爲合法的變量名,同時也檢查和符號表中已存在的變量名是否衝突。對不合法和衝突的鍵名的處理將根據此參數決定。
可能的值:
EXTR_OVERWRITE - 默認。如果有衝突,則覆蓋已有的變量。
EXTR_SKIP - 如果有衝突,不覆蓋已有的變量。
EXTR_PREFIX_SAME - 如果有衝突,在變量名前加上前綴 prefix。
EXTR_PREFIX_ALL - 給所有變量名加上前綴 prefix。
EXTR_PREFIX_INVALID - 僅在不合法或數字變量名前加上前綴 prefix。
EXTR_IF_EXISTS - 僅在當前符號表中已有同名變量時,覆蓋它們的值。其它的都不處理。
EXTR_PREFIX_IF_EXISTS - 僅在當前符號表中已有同名變量時,建立附加了前綴的變量名,其它的都不處理。
EXTR_REFS - 將變量作爲引用提取。導入的變量仍然引用了數組參數的值。
prefix 可選。如果 extract_rules 參數的值是 EXTR_PREFIX_SAME、EXTR_PREFIX_ALL、 EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS,則 prefix 是必需的。
該參數規定了前綴。前綴和數組鍵名之間會自動加上一個下劃線。
<?php
$a = "Original";
$my_array = array("a" => "Cat", "b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, "dup");
echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a";
?>
//$a = Original; $b = Dog; $c = Horse; $dup_a = Cat
- array_key_exists(key,array)
檢查指定的鍵名是否存在於數組中。
- in_array ( $needle , $haystack [, $strict = FALSE ] )
檢查數組中是否存在指定的值。
needle 必需。規定要在數組搜索的值。
haystack 必需。規定要搜索的數組。
strict 可選。如果該參數設置爲 TRUE,則 in_array() 函數檢查搜索的數據與數組的值的類型是否相同。
- array_search(value,array,strict)
在數組中搜索給定的值,如果成功則返回相應的鍵名。
strict 可選。如果該參數被設置爲 TRUE,則函數在數組中搜索數據類型和值都一致的元素。可能的值:
true
false - 默認
如果設置爲 true,則在數組中檢查給定值的類型,數字 5 和字符串 5 是不同的。
- array_count_values()
用於統計數組中所有值出現的次數。
- each()
返回數組中當前的鍵/值對。
- list()
把數組中的值賦給一些數組變量。
- count()
返回數組中元素的數目。
- sizeof()
count() 的別名。
- current()
返回數組中的當前元素。
- pos()
current() 的別名。
- end()
將數組的內部指針指向最後一個元素。
- next()
將數組中的內部指針向後移動一位。
- prev()
將數組的內部指針倒回一位。
- reset()
將數組的內部指針指向第一個元素。
- array_slice()
返回數組中的選定部分。
- array_splice()
把數組中的指定元素去掉並用其它值取代。
- array_replace()
使用後面數組的值替換第一個數組的值。
- array_replace_recursive()
遞歸地使用後面數組的值替換第一個數組的值。
- array_product()
計算數組中所有值的乘積。
- array_sum()
返回數組中所有值的和。
- array_reverse()
將原數組中的元素順序翻轉,創建新的數組並返回。
- array_flip()
反轉/交換數組中的鍵名和對應關聯的鍵值。
- shuffle()
把數組中的元素按隨機順序重新排列。
- array_chunk()
把一個數組分割爲新的數組塊。
- array_unshift()
在數組開頭插入一個或多個元素。
- array_push()
將一個或多個元素插入數組的末尾(入棧)。
- array_pop()
刪除數組中的最後一個元素(出棧)。
- array_shift()
刪除數組中的第一個元素,並返回被刪除元素的值。
- array_unique()
刪除數組中重複的值。
- array_fill()
用給定的鍵值填充數組。
- array_fill_keys()
用給定的指定鍵名的鍵值填充數組。
- array_pad()
將指定數量的帶有指定值的元素插入到數組中。
- array_combine()
通過合併兩個數組(一個爲鍵名數組,一個爲鍵值數組)來創建一個新數組。
- array_merge()
把一個或多個數組合併爲一個數組。
- array_merge_recursive()
遞歸地把一個或多個數組合併爲一個數組。
- array_rand(array,number)
返回數組中的一個隨機鍵名,或者如果指定函數返回鍵名不只一個,則返回一個包含隨機鍵名的數組。
- array_reduce(array,myfunction,initial)
發送數組中的值到用戶自定義函數,並返回一個字符串。
如果數組是空的或者初始值未傳遞,該函數返回 NULL。
array 必需。規定數組。
myfunction 必需。規定函數的名稱。
initial 可選。規定發送到函數處理的第一個值。
function myfunction($v1,$v2){
return $v1 . "-" . $v2;
}
$a=array("Dog","Cat","Horse");
print_r(array_reduce($a,"myfunction",5));
//5-Dog-Cat-Horse
- array_map(myfunction,array1,array2,array3…)
將用戶自定義函數作用到數組中的每個值上,並返回用戶自定義函數作用後的帶有新的值的數組。
<?php
//使用一個用戶自定義函數來改變數組的值:
function myfunction($v)
{
if ($v==="Dog")
{
return "Fido";
}
return $v;
}
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));
//Array ( [0] => Horse [1] => Fido [2] => Cat )
?>
//使用兩個數組:
<?php
function myfunction($v1,$v2)
{
if ($v1===$v2)
{
return "same";
}
return "different";
}
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction",$a1,$a2));
//Array ( [0] => different [1] => same [2] => different )
?>
- array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
把輸入數組中的每個鍵值傳給回調函數。如果回調函數返回 true,則把輸入數組中的當前鍵值返回給結果數組。數組鍵名保持不變。
flag 可選。決定 callback 接收的參數形式:
ARRAY_FILTER_USE_KEY - callback 接受鍵名作爲的唯一參數
ARRAY_FILTER_USE_BOTH - callback 同時接受鍵名和鍵值
- array_walk()
對數組中的每個成員應用用戶函數。
- array_walk_recursive()
對數組中的每個成員遞歸地應用用戶函數。
- array_diff()
比較數組,返回兩個數組的差集(只比較鍵值)。
- array_diff_assoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值)。
- array_diff_key()
比較數組,返回兩個數組的差集(只比較鍵名)。
- array_diff_uassoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用用戶自定義的鍵名比較函數)。
- array_diff_ukey()
比較數組,返回兩個數組的差集(只比較鍵名,使用用戶自定義的鍵名比較函數)。
- array_intersect()
比較數組,返回兩個數組的交集(只比較鍵值)。
- array_intersect_assoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值)。
- array_intersect_key()
比較數組,返回兩個數組的交集(只比較鍵名)。
- array_intersect_uassoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用用戶自定義的鍵名比較函數)。
- array_intersect_ukey()
比較數組,返回兩個數組的交集(只比較鍵名,使用用戶自定義的鍵名比較函數)。
- array_udiff()
比較數組,返回兩個數組的差集(只比較鍵值,使用一個用戶自定義的鍵名比較函數)。
- array_udiff_assoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用內建函數比較鍵名,使用用戶自定義函數比較鍵值)。
- array_udiff_uassoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用兩個用戶自定義的鍵名比較函數)。
- array_uintersect()
比較數組,返回兩個數組的交集(只比較鍵值,使用一個用戶自定義的鍵名比較函數)。
- array_uintersect_assoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用內建函數比較鍵名,使用用戶自定義函數比較鍵值)。
- array_uintersect_uassoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用兩個用戶自定義的鍵名比較函數)。
- sort()
對數值數組進行升序排序。
- rsort()
對數值數組進行降序排序。
- uasort()
使用用戶自定義的比較函數對數組中的鍵值進行排序。
- uksort()
使用用戶自定義的比較函數對數組中的鍵名進行排序。
- usort()
使用用戶自定義的比較函數對數組進行排序。
- arsort()
對關聯數組按照鍵值進行降序排序。
- asort()
對關聯數組按照鍵值進行升序排序。
- krsort()
對關聯數組按照鍵名降序排序。
- ksort()
對關聯數組按照鍵名升序排序。
- natcasesort()
用"自然排序"算法對數組進行不區分大小寫字母的排序。
- natsort()
用"自然排序"算法對數組排序。
- array_multisort()
對多個數組或多維數組進行排序。