🌟陣列: 建立陣列 $products = array('Tires','Oil','Spark Plugs'); $products2 = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4); 5.4後建立陣列也可用 $products = ['Tires','Oil','Spark Plugs']; 陣列建立(按數字昇冪排序'mi'):range(1,10); range(1,10,2);//可產生1~10奇數數字陣列 range('a','z');//字元陣列 添加元素 array_push($arr,$value); 移除結尾元素 array_pop($arr); 以下要知道,只要有內容即為真,除非為Null或0代表為無。 利用迴圈來遍歷陣列: foreach($products as $current){ echo $current.""; } 存取陣列(非數字索引): echo $products2['Tires'].$products2['Oil'].$products2['Spark Plugs']; 1. foreach($products2 as $key => $value){ echo $key." - ".$value."<br />"; } 2. while($element = each($products2)){ echo $element['key']." - ".$element['value']; echo "<br />"; } 3. while(list($products2, $price) = each($prices)){ echo $product." - ".$price."<br />"; } 4. reset($prices); while(list($product, $price) = each($prices)){ echo $product." - ".$price."<br />"; } 陣列排序(按字母或數字A-Za-z0-9): 升冪排序: sort($arr);//第二個參數選用可單獨利用數字、字串等功能、區域字串比較、自然排序、不區分大小寫比較。 asort($arr);可以排序鍵值陣列('apple'=>10)利用值排序。 ksort($arr);可以排序鍵值陣列('apple'=>10)利用鍵排序。 降冪排序: rsort($arr); arsort($arr); krsort($arr); 隨機排序: shuffle($arr); 反向排列陣列: reverse($arr); 多維陣列排序: array_multisort($arr);//第二個選用值可控制升降冪(SORT_ASC,SORT_DESC)第三個選用可單獨利用數字、字串等功能、區域字串比較、自然排序、不區分大小寫比較。 排序方式會以第一個項目來排序。 自訂排序: function compare($x,$y){ if($x[1] == $y[1]){ return 0; }else if($x[1] < $y[1]){ return -1; }else{ return 1; } } usort($products, 'compare'); $?[1]改為$?[2]將以值排序? compare改為reverse_compare會產生一個降冪排序。 其他陣列操作: each();//間接使用指標,會回傳目前的元素,並將指標往前移動一個元素。 current();//直接使用指標(會回傳第一個元素) reset();//將指標移回第一個元素。 end();//將指標移到結尾元素。 next();//將指標往前移動一個元素,並回傳新的目前元素。 pos();// prev();//將指標往後移動一個元素,並回傳新的目前元素。(next相反 array_walk();//類似usort()可對陣列的每一個元素套用任何函式 count();//計算元素的數量 sizeof();//計算元素的數量 array_count_values();//計算不同值的數量,回傳值(鍵)與次數(值)陣列。 extract();//會將陣列轉換為純量變數。'apple'=>10將變為$apple = 10; 他有兩個選用參數。第一個可選擇如何處理衝突。第二個可對衝突加上前置詞。
🌟字串處理與正規表達式:
字串格式化:
chop();//刪除右側空白
trim();//將移除前後空白ltrim();//刪除左側空白rtrim();//刪除右側空白
格式化字串以供輸出:
htmlspecialchars($string);//可篩選準備輸出到瀏覽器的字串。會將具功能的字元轉換為無效的對等字元。
共有三個選用參數第一個參數用來指定轉換該怎做。第二個參數用來指定編碼方式。第三個參數選定是否要編碼HTML實體?預設為真
nl2br();//會接收一個字串參數,並將裡面的換行字元全部轉換成HTML<br/>標籤,可於HTML正常換行。
str_replace();//
printf();//會輸出格式化後的字串 sprintf();//會回傳一個格式化後的字串 範例:print("$.2f",$myFloat);
改變字串大小寫
strtoupper();//將字串轉為大寫
strtolower();//將字串轉為小寫
ucfirst();//如果字串第一個字元是字母,則第一個字母改成大寫回傳。Hello world
ucwords();//如果字串內單字第一個字元是字母,則第一個字母改成大寫回傳。Hello World
連結與拆解字串:
explode($keyword,$input);//接收一個input字串,利用keyword字串來將它切開,切開來後不包含keyword字串。
一個選用,可給予int控制元件數量
implode($keyword,$input);//會接收一個input陣列並利用keyword組合他們,是explode相反效果。 join();效果與implode相似
strtok($input,$keyword);//會接收一個input字串,並依照keyword字串分隔字串中的各個單字來拆解成一個陣列。keyword可以多個利用,分開即可。
substr($input,$str,$end);//指定字串的起點數字與結束點數字,用來取得他們之間的字串。只給予起始值則依照位置給予字串位置至結尾(可負值)
比較字串:
strcmp($str1,$str2);//會比較字串,若相等回傳0。str1字典順序在str2後會回傳大於0的數字。反之~且函式會區分大小寫。
strcasecmp($str1,$str2);//會按照自然順序來比較字串,其餘與strcmp相同皆回傳數字。(不區分大小寫)
strnatcmp($str1,$str2);//會按照自然順序來比較字串,其餘與strcmp相同皆回傳數字。(區分大小寫)
確認字串長度:
strlen($str);//會回傳字串的長度
尋找字串中的字串:
strstr($str,$keyword);//檢查str字串內是否有keyword若存在,若存在回傳keyword與後半部分,不存在則回傳flase。
一個自選變數true回傳前半部分(回傳前半部分不含keyword)
strchr();//與strstr相同
strrchr($str,$keyword);//檢查str字串內是否有keyword若存在,若存在回傳keyword與後半部分,不存在則回傳flase。
尋找子字串的位置:
strpos($str,$str2);//輸入$str字串找出$str2第一次出現的位置,會回傳數字。如果不存在回傳flase。
一個自選變數int可去定從第幾字元開始尋找。
strrpos($str,$str2);//與strpos相同,但會回傳最後出現的位置。如果不存在回傳flase。
替換子字串:
str_replace("key","new_key",$String);//替換$String字串中的key成new_key
substr_replace($String,"new_key",$int);//替換$String字串中$int位置開始替換成new_key
選用一個變數,規定替換多少字符
正規表達式:
語法使用Perl,功能類似strstr(),並可使用特殊字元來指名meta含義,以經准匹配字元。
特殊字元解釋:
/*/分隔符號,使用Pcre正規表達式時,每一個表達式都必須放在一對分隔符號中。
最常用的分隔符號是正斜線,如果你要匹配正規表裡面的/值就必須用\(反斜線)字元來轉譯他。
例如:/http:\/\// 可用來匹配http://。
如果裡面有許多分隔符號需表達為字元,可使用#來表示。
例如:#http://#
字元類別與型態:
.字做為萬用字元,代表除了換行符號\n外的單一字元。
例:/.at/ 則會通過cat,sat,bat,#at等...
匹配集合(一個範圍內的字元),可使用[與]表示
裡面東西都是字元類別,方括號裡面的表達式只會匹配一個字元。
例:/[aeiou]/ 將找出所有母音。
可使用連字符號來描述一個範圍,或一組範圍。
例:/[a-z]at/ 將匹配單一小寫字母加上at
例:/[a-zA-Z]at/ 將匹配單一小寫與大寫字母加上at
可使用^(Not)來指名該字元不能是某個集合的成員。
例:/[^a-z]/
字元類別:
[[:alun:]] 英文字元
[[:alpha:]] 字母字元
[[:ascii:]] ASCII字元
[[:lower:]] 小寫字母
[[:upper:]] 大寫字母
[[:word:]] “Word”字元(字母、數字與底線)
[[:digit:]] 十進位數字
[[:xdigit:]] 十六進位數字
[[:punct:]] 標點符號
[[:blank:]] Tab與空白字元
[[:space:]] 空白字元
[[:cntrl:]] 控制字元
[[:print:]] 所有可印出的字元
[[:graph:]] 除了空白之外的所有可印出字元
例:/[[:alpha:]1-5]/ 可含有任何字母字元,1至5的任何數字。
重複:
用來表示這個匹配集合或字母可能會重複出現。
+ 代表該文字模式可能重複一次或多次
* 代表該文字模式可能重複零次或多次
? 代表該文字模式可能出現一次或完全不出現
例:/[[:alnum:]]+/ 至少一個英數字元
子表達式:
用來表示:至少有一個屬於這些字串的字串在裡面。用()來表示子字串。
例:/(very )*large/ 代表very 可能重複零次或多次出現 在large前面。
多次出現的子表達式:
用來表示該模式可能出現幾次。用{}來表示。
例:/(very ){1,3}/ 代表可能重複一次到三次。
例:/(very ){1,}/ 代表可能重複一次以上。
例:/(very ){1}/ 代表可能重複一次。
例:/(very ){1}large/ 代表very 可能出現一次 在large前面。
錨定字串的開頭或結尾:
開頭以^表示,結尾以$表示。
例:/^bob/ 用來匹配開頭bob。
例:/com$/ 在字串結尾匹配com。
例:/^[a-z]$/ 匹配只含有一個a-z的字串。
分支:
用直立線符號表示。可匹配多個表達式。
例:/com|edu|net/ 可用來匹配com,edu,net。
匹配字面的特殊字元:
加上\反斜線,可使有特殊意義的字元成一般字元。或使一般字元成特殊意義字元\n,\r...
回顧中繼字元:
方括號外的中繼字元:
\ 轉譯字元
^ 匹配字串的開頭
$ 匹配字串的結尾
. 匹配換行字元(\n)開頭外的所有字元
| 選擇性分支的開頭(OR)
( 開始子表達式
) 結束子表達式
* 重複零或多次
+ 重複一或多次
{ 開始最小/最大數量表示式
} 結束最小/最大數量表示式
? 讓子模式變成可選的
方括號內的中繼字元:
\ 轉譯字元
^ NOT,只在初始位置使用。
- 用來指定字元範圍。
轉義序列:
\n 換行
\r 歸位
\t TAB
\cx Control-x? x代表任何字元
\e 轉譯?
\d 十進位數字
\D 除了十進位數字之外的東西
\h 水平空白
\H 除了水平空白之外的東西
\s 空白字元
\S 除了空白之外的東西
\v 垂直空白
\V 除了空白之外的東西
\w “word”字元(所有字母、數字、底線、特定地區重音字母)
\W 除了“word”字元之外的東西
回歸參考:比較難懂。
用來匹配在字串中出現多次的同一個子表達式。
例:/^([a-z]+) \1 black sheep/ 找出匹配前一個子表達式的字彙,並再次匹配。
baa baa black sheep可匹配
blah baa black sheep不行
判斷提示:
測試字元是否符合條件。
\b 文字邊界
\B 非文字邊界
\A 主題開始
\z 主題結束
\Z 主題結束或結尾的換行
\G 在主題中首次匹配的位置
模式修飾符號:
i:取消對大小寫字母敏感性。(不區分大小寫)
m:指定範圍為每一行。(開頭'^'結尾'$')
o:表達式只執行一次
s:"."除了換行符號的任何字符將變任意字符?
x:忽略空白字符
g:替換匹配的字符
e:替換字符串作為表達式?
例:/shop/i
實際應用例子:
email: /^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/ 其他改善方式:列出有效TLDs頂層網域
尋找字串:
if(preg_math('/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/',$email)===0){
echo '這不是email';
}
替換子字串:preg_replace()
分割字串:preg_split()