字符串類型
定義語法
引號方式:比較適合定義那些比較短(不超過一行)或者沒有結(jié)構(gòu)要求的字符串
1)單引號字符串:使用單引號包裹
2)雙引號字符串:使用雙引號包裹
$str = "hello world";
$str2 = 'hello world'
3)nowdoc字符串:沒有單引號的單引號字符串
$str = <<<’邊界符’
字符串內(nèi)容
邊界符;
4)heredoc字符串:沒有雙引號的雙引號字符串
$str = <<<邊界符
字符串內(nèi)容
邊界符;
例子:
//heredoc結(jié)構(gòu)
$str3 = <<<EOD
hello
EOD;
//nowdoc結(jié)構(gòu)
$str4 = <<<'EOD'
hello
EOD;
var_dump($str3,$str4);
?>
Heredoc和nowdoc比引號還是要區(qū)別多一點
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ce8Wcmlk-1692770514392)(C:/Users/Mango/AppData/Roaming/Typora/typora-user-images/image-20230801110215945.png)]
字符串轉(zhuǎn)義
轉(zhuǎn)義的含義:在計算機通用協(xié)議中,有一些特定的方式定義的字母,系統(tǒng)會特定處理:通常這種方式都是使用反斜杠+字母(單詞)的特性:
在PHP中系統(tǒng)常用的轉(zhuǎn)義符號:
\’:在單引號字符串中顯示單引號
\”:在雙引號字符串中顯示雙引號
\r:代表回車(理論上是回到當(dāng)前行的首位置)
\n:代表新一行
\t:類似tab鍵,輸出4個空格
$:在PHP中使用$符號作為變量符號,因此需要特定識別
單引號和雙引號的區(qū)別
1、 其中單引號中能夠識別\’,而雙引號中就不能識別\’(下圖瀏覽器查看的是頁面源代碼)
2、 雙引號因為能夠識別$符號,所以雙引號中可以解析變量,而單引號不可以
//變量識別:
$str1 = 'abcd {$a} dfg';
$str2 = "abcd {$a} dfg";
var_dump($str1,$str2);//string(13) "abcd {$a} dfg" string(14) "abcd hello dfg"
雙引號中變量識別的規(guī)則
1)變量本身系統(tǒng)能夠與后面的內(nèi)容區(qū)分:應(yīng)該保證變量的獨立性,不要讓系統(tǒng)難以區(qū)分
$a = 'hello';
$str = "abc$afd";//系統(tǒng)會將afd作為一個變量,而現(xiàn)在沒有該變量的定義,所以會出錯
2)使用變量專業(yè)標(biāo)識符(區(qū)分),變量加上一組大括號{}
$a = 'hello';
$str = "abc{$a}fd";//系統(tǒng)會將afd作為一個變量,而現(xiàn)在沒有該變量的定義,所以會出錯
字符串相關(guān)函數(shù)
1)基本函數(shù)strlen():得到字符串的長度(字節(jié)為單位)
$str1 = 'abcde';
$str2 = '你好中國';
echo strlen($str1)," ",strlen($str2); //5 12
在utr8字符集下,一個中文占3字節(jié)
2)轉(zhuǎn)換函數(shù):implode(), explode(), str_split()
- implode(連接方式,數(shù)組):將數(shù)組中的元素按照某個規(guī)則連接成一個字符串
- explode(分割字符,目標(biāo)字符串):將字符串按照某個格式進行分割,變成數(shù)組
- 中國|北京|順義 == array(‘中國’,‘北京’,’順義’);
- str_split(字符串,字符長度):按照指定長度拆分字符串得到數(shù)組
3)截取函數(shù):trim(), ltrim(), rtrim()
trim(字符串[,指定字符]):本身默認是用來去除字符串兩邊的空格(中間不行),但是也可以指定要去除的內(nèi)容,是按照指定的內(nèi)容循環(huán)去除兩邊有的內(nèi)容:直到碰到一個不是目標(biāo)字符為止
ltrim():去除左邊的 rtrim():去除右邊的
4)截取函數(shù):substr(), strstr()
substr(字符串,起始位置從0開始[,長度]):指定位置開始截取字符串,可以截取指定長度(不指定到最后)
strstr(字符串,匹配字符):字符串匹配函數(shù),從指定位置開始,截取到最后(可以用來去文件后綴名)
$str = ' abcd e f';
echo substr($str,1,3),"<br/>"; //abc
echo strstr($str,'c');//cd e f
5)大小轉(zhuǎn)換函數(shù):strtolower(), strtoupper(), ucfirst()
strtolower:全部小寫
strtoupper:全部大寫
ucfirst:首字母大寫
6)查找函數(shù):strpos(), strrpos()
strpos(字符串,匹配字符):判斷字符在目標(biāo)字符串中出現(xiàn)的位置(首次)
strrpos(字符串,匹配字符):判斷字符在目標(biāo)字符串中最后出現(xiàn)的位置
7)替換函數(shù):str_replace()
str_replace(匹配目標(biāo),替換的內(nèi)容,字符串本身):將目標(biāo)字符串中部分字符串進行替換
8)格式化函數(shù):printf(), sprintf()
printf/sprintf(輸出字符串有占位符,順序占位內(nèi)容…):格式化輸出數(shù)據(jù)
$age = 10;
printf("hello I am Mango,My age:%d",$age);
echo sprintf("hello I am Mango,My age:%d\n",$age);
9)其他:str_repeat(), str_shuffle()
str_repeat():重復(fù)某個字符串N次
str_shuffle():隨機打亂字符串
數(shù)組
數(shù)組:array,數(shù)據(jù)的組合,指將一組數(shù)據(jù)(多個)存儲到一個指定的容器中,用變量指向該容器,然后可以通過變量一次性得到該容器中的所有數(shù)據(jù)。
定義方式
在PHP中系統(tǒng)提供多種定義數(shù)組的方式:
1、 使用array關(guān)鍵字:最常用的
$變量 = array(元素1,元素2,元素3..);
$arr = array('1',2,'hello');
var_dump($arr);//array(3) { [0]=> string(1) "1" [1]=> int(2) [2]=> string(5) "hello" }
2、 可以使用中括號來包裹數(shù)據(jù):
- $變量 = [元素1,元素2…];
$arr =['1',2,'hello',3.14];
var_dump($arr);//array(4) { [0]=> string(1) "1" [1]=> int(2) [2]=> string(5) "hello" [3]=> float(3.14) }
3、 隱形定義數(shù)組:給變量增加一個中括號,系統(tǒng)自動變成數(shù)組
$變量[] = 值1; //如果不提供下標(biāo)也可以,系統(tǒng)自動生成(數(shù)字:從0開始)
$變量[下標(biāo)] = 值; //中括號里面的內(nèi)容稱之為下標(biāo)key,該下標(biāo)可以是字母(單詞)或者數(shù)字,與變量命名的規(guī)則相似
$arr[] = 1;
$arr[10] = 'ten';
$arr[] = 'what number'; //默認下標(biāo)是從當(dāng)前前面最大的數(shù)字下標(biāo)開始遞增,所以這里的下標(biāo)是11
$arr['key'] = 'value';
var_dump($arr);//array(4) { [0]=> int(1) [10]=> string(3) "ten" [11]=> string(11) "what number" ["key"]=> string(5) "value" }
數(shù)組特點
1)可以整數(shù)下標(biāo)或者字符串下標(biāo)
-
如果數(shù)組下標(biāo)都為整數(shù):索引數(shù)組
-
如果數(shù)組下標(biāo)都為字符串:關(guān)聯(lián)數(shù)組
2)不同下標(biāo)可以混合存在:混合數(shù)組
3)數(shù)組元素的順序以放入順序為準(zhǔn),跟下標(biāo)無關(guān)
4)數(shù)字下標(biāo)的自增長特性:從0開始自動增長,如果中間手動出現(xiàn)較大的,那么后面的自增長元素從最大的值+1開始
5)特殊值下標(biāo)的自動轉(zhuǎn)換
-
布爾值:true和false
-
空:NULL
$arr[false] = false;
$arr[true] = true;
$arr[NULL] = NULL;
var_dump($arr);//array(3) { [0]=> bool(false) [1]=> bool(true) [""]=> NULL }
6)PHP中數(shù)組元素沒有類型限制
7)PHP中數(shù)組元素沒有長度限制
補充:PHP中的數(shù)組是很大的數(shù)據(jù),所以存儲位置是堆區(qū),為當(dāng)前數(shù)組分配一塊連續(xù)的內(nèi)存。
二維數(shù)組
多維數(shù)組:數(shù)組里面的元素又是數(shù)組。在第二維的數(shù)組元素中可以繼續(xù)是數(shù)組,在PHP中沒有維度限制(PHP本質(zhì)并沒有二維數(shù)組),但是:不建議使用超過三維以上的數(shù)組,會增加訪問的復(fù)雜度,降低訪問效率。
- 二維數(shù)組:數(shù)組中所有的元素都是一維數(shù)組
$info = array(
array('name' => 'Mango','age' => 20),
array('name' => 'Lemon','age' => 10),
array('orange' => '','age' => 30),
);
echo '<pre>';
var_dump($info);
//輸出
array(3) {
[0]=>
array(2) {
["name"]=>
string(5) "Mango"
["age"]=>
int(20)
}
[1]=>
array(2) {
["name"]=>
string(5) "Lemon"
["age"]=>
int(10)
}
[2]=>
array(2) {
["orange"]=>
string(0) ""
["age"]=>
int(30)
}
}
數(shù)組遍歷
數(shù)組遍歷:普通數(shù)組數(shù)據(jù)的訪問都是通過數(shù)組元素的下標(biāo)來實現(xiàn)訪問,如果說數(shù)組中所有的數(shù)據(jù)都需要依次輸出出來,就需要我們使用到一些簡化的規(guī)則來實現(xiàn)自動獲取下標(biāo)以及輸出數(shù)組元素。
$arr = array(0=>array('name' => 'Tom'), 1=>array('name' => 'Jim')); //二維數(shù)組
//訪問一維元素:$arr[一維下標(biāo)]
$arr[0]; //結(jié)果:array(‘name’ => ‘Tom’);
//訪問二維元素:$arr[一維下標(biāo)][二維下標(biāo)
$arr[1]['name']; //Jim
foreach遍歷語法
基本語法
foreach($數(shù)組變量 as [$下標(biāo) =>] $值){
//通過$下標(biāo)訪問元素的下標(biāo);通過$值訪問元素的值
}
通常:如果是關(guān)聯(lián)數(shù)組(字母下標(biāo)),就需要下標(biāo),如果是數(shù)字下標(biāo)就直接訪問值
$arr = array(1,2,3,4,5,6,7,8,9,10);
foreach($arr as $key => $val)
{
echo 'key:',$key,'====value:',$val,'<br/>';
}
//輸出
key:0====value:1
key:1====value:2
key:2====value:3
key:3====value:4
key:4====value:5
key:5====value:6
key:6====value:7
key:7====value:8
key:8====value:9
key:9====value:10
原理:
foreach遍歷的原理:本質(zhì)是數(shù)組的內(nèi)部有一顆指針,默認是指向數(shù)組元素的第一個元素,foreach就是利用指針去獲取數(shù)據(jù),同時移動指針。
for循環(huán)遍歷數(shù)組
for循環(huán):基于已知邊界條件(起始和結(jié)束)然后有條件的變化(規(guī)律)。因此:for循環(huán)遍歷數(shù)組有對應(yīng)條件
1、 獲取數(shù)組長度:count(數(shù)組)得到數(shù)組元素的長度
2、 要求數(shù)組元素的下標(biāo)是規(guī)律的數(shù)字
$arr = array(1,2,3,4,5,6,7);
for($i = 0,$len = count($arr);$i < $len ;$i++)
{
printf("key:%d val:%d",$i,$arr[$i]);
echo '<pre>';
}
相關(guān)函數(shù)
1)排序函數(shù):對數(shù)組元素進行排序,都是按照ASCII碼進行比較,可以進行英文比較
-
sort():順序排序(下標(biāo)重排)
-
rsort():逆序排序(下標(biāo)重排)
-
shuffle():隨機打亂數(shù)組元素,數(shù)組下標(biāo)會重排
2)指針函數(shù)
- reset():重置指針,將數(shù)組指針回到首位
- end():重置指針,將數(shù)組指針指導(dǎo)最后一個元素
- next():指針下移,取得下一個元素的值
- prev():指針上移,取得上一個元素的值
- current():獲取當(dāng)前指針對應(yīng)的元素值
- key():獲取當(dāng)前指針對應(yīng)的下標(biāo)值
注意事項:next和prev會移動指針,有可能導(dǎo)致指針越界,導(dǎo)致數(shù)組不能使用,通過next和prev不能回到真確的指針位置。只能通過end或者reset進行指針重置
$arr = array(3,1,5,2,0);
echo next($arr)," ",next($arr),'<br/>'; //1 5
echo prev($arr),'<br/>';//1
echo current($arr),'<br/>';//1
echo key($arr),'<br/>';//下標(biāo):1
3)其他函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-672168.html
- count():統(tǒng)計數(shù)組中元素的數(shù)量
- array_push():往數(shù)組中加入一個元素(尾插)
- array_pop():從數(shù)組中取出一個元素(尾刪)
- array_shift():從數(shù)組中取出一個元素(頭刪)
- array_unshift():從數(shù)組中加入一個元素(頭插)
- array_reverse():數(shù)組元素反過來 --逆置數(shù)組
- in_array(數(shù)值,數(shù)組):判斷一個元素在數(shù)組中是否存在
- array_keys():獲取一個數(shù)組的所有下標(biāo),返回一個索引數(shù)組
- array_values():獲取一個數(shù)組的所有值,返回一個索引數(shù)組
相關(guān)題目
求斐波那契數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-672168.html
//求第n個斐波那契數(shù)
// 1 1 2 3 5 8 13...
function Fib_recursion($n)
{
if($n == 1 || $n == 2)
return 1;
else
return Fib($n-1) + Fib($n-2);
}
function Fib_cycle($n)
{
$f1 = 1;
$f2 = 1;
$f3 = 0;
for($i = 3;$i<=$n;$i++)
{
$f3 = $f2 + $f1;
$f1 = $f2;
$f2 = $f3;
}
return $f2;
}
echo Fib_cycle(6);
到了這里,關(guān)于【PHP】字符串&數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!