【PHP】字符串&数组

字符串类型

定义语法

引号方式:比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串

1)单引号字符串:使用单引号包裹

2)双引号字符串:使用双引号包裹

$str = "hello world";
$str2 = 'hello world'

3)nowdoc字符串:没有单引号的单引号字符串

$str = <<<’边界符’
	字符串内容
边界符;

4)heredoc字符串:没有双引号的双引号字符串

$str = <<<边界符
	字符串内容
边界符;

例子:

	//heredoc结构
	$str3 = <<<EOD
		hello
EOD;
	//nowdoc结构
	$str4 = <<<'EOD'
		hello
EOD;
	var_dump($str3,$str4);
?>

Heredoc和nowdoc比引号还是要区别多一点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ce8Wcmlk-1692770514392)(C:/Users/Mango/AppData/Roaming/Typora/typora-user-images/image-20230801110215945.png)]


字符串转义

转义的含义:在计算机通用协议中,有一些特定的方式定义的字母,系统会特定处理:通常这种方式都是使用反斜杠+字母(单词)的特性:

在PHP中系统常用的转义符号:

\’:在单引号字符串中显示单引号

\”:在双引号字符串中显示双引号

\r:代表回车(理论上是回到当前行的首位置)

\n:代表新一行

\t:类似tab键,输出4个空格

$:在PHP中使用$符号作为变量符号,因此需要特定识别


单引号和双引号的区别

1、 其中单引号中能够识别\’,而双引号中就不能识别\’(下图浏览器查看的是页面源代码)

image-20230801114131214

2、 双引号因为能够识别$符号,所以双引号中可以解析变量,而单引号不可以

//变量识别:
$str1 = 'abcd {$a} dfg';
$str2 = "abcd {
      
      $a} dfg";
var_dump($str1,$str2);//string(13) "abcd {$a} dfg"      string(14) "abcd hello dfg"

双引号中变量识别的规则

1)变量本身系统能够与后面的内容区分:应该保证变量的独立性,不要让系统难以区分

$a = 'hello';
$str = "abc$afd";//系统会将afd作为一个变量,而现在没有该变量的定义,所以会出错

2)使用变量专业标识符(区分),变量加上一组大括号{}

$a = 'hello';
$str = "abc{
      
      $a}fd";//系统会将afd作为一个变量,而现在没有该变量的定义,所以会出错

字符串相关函数

1)基本函数strlen():得到字符串的长度(字节为单位)

$str1 = 'abcde';
$str2 = '你好中国';
echo strlen($str1)," ",strlen($str2); //5 12

在utr8字符集下,一个中文占3字节

2)转换函数:implode(), explode(), str_split()

  • implode(连接方式,数组):将数组中的元素按照某个规则连接成一个字符串
  • explode(分割字符,目标字符串):将字符串按照某个格式进行分割,变成数组
    • 中国|北京|顺义 == array(‘中国’,‘北京’,’顺义’);
  • str_split(字符串,字符长度):按照指定长度拆分字符串得到数组

3)截取函数:trim(), ltrim(), rtrim()

trim(字符串[,指定字符]):本身默认是用来去除字符串两边的空格(中间不行),但是也可以指定要去除的内容,是按照指定的内容循环去除两边有的内容:直到碰到一个不是目标字符为止

ltrim():去除左边的 rtrim():去除右边的

4)截取函数:substr(), strstr()

substr(字符串,起始位置从0开始[,长度]):指定位置开始截取字符串,可以截取指定长度(不指定到最后)

strstr(字符串,匹配字符):字符串匹配函数,从指定位置开始,截取到最后(可以用来去文件后缀名)

$str = ' abcd e f';
echo substr($str,1,3),"<br/>"; //abc
echo strstr($str,'c');//cd e f

5)大小转换函数:strtolower(), strtoupper(), ucfirst()

strtolower:全部小写

strtoupper:全部大写

ucfirst:首字母大写

image-20230801115155901

6)查找函数:strpos(), strrpos()

strpos(字符串,匹配字符):判断字符在目标字符串中出现的位置(首次)

strrpos(字符串,匹配字符):判断字符在目标字符串中最后出现的位置

image-20230801115150272

7)替换函数:str_replace()

str_replace(匹配目标,替换的内容,字符串本身):将目标字符串中部分字符串进行替换

image-20230801115233692

8)格式化函数:printf(), sprintf()

printf/sprintf(输出字符串有占位符,顺序占位内容…):格式化输出数据

$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():重复某个字符串N次

str_shuffle():随机打乱字符串

image-20230801115511755


数组

数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据。

定义方式

在PHP中系统提供多种定义数组的方式:

1、 使用array关键字:最常用的

  • $变量 = 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、 可以使用中括号来包裹数据:

  • $变量 = [元素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、 隐形定义数组:给变量增加一个中括号,系统自动变成数组

$变量[] = 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始

$变量[下标] = 值; //中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相似

$arr[] = 1;
$arr[10] = 'ten';
$arr[] = 'what number'; //默认下标是从当前前面最大的数字下标开始递增,所以这里的下标是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" }

数组特点

1)可以整数下标或者字符串下标

  • 如果数组下标都为整数:索引数组

  • 如果数组下标都为字符串:关联数组

2)不同下标可以混合存在:混合数组

3)数组元素的顺序以放入顺序为准,跟下标无关

4)数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始

5)特殊值下标的自动转换

  • 布尔值: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中数组元素没有类型限制

7)PHP中数组元素没有长度限制

补充:PHP中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。


二维数组

多维数组:数组里面的元素又是数组。在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组),但是:不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。

  • 二维数组:数组中所有的元素都是一维数组
$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)
  }
}

数组遍历

数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据都需要依次输出出来,就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素。

$arr = array(0=>array('name' => 'Tom'), 1=>array('name' => 'Jim'));	//二维数组
//访问一维元素:$arr[一维下标]
$arr[0];	//结果:array(‘name’ => ‘Tom’);

//访问二维元素:$arr[一维下标][二维下标
$arr[1]['name'];	//Jim

foreach遍历语法

基本语法

foreach($数组变量 as [$下标 =>] $值){
    
    
	//通过$下标访问元素的下标;通过$值访问元素的值
}

通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值

$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遍历的原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。


for循环遍历数组

for循环:基于已知边界条件(起始和结束)然后有条件的变化(规律)。因此:for循环遍历数组有对应条件

1、 获取数组长度:count(数组)得到数组元素的长度

2、 要求数组元素的下标是规律的数字

$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>';
}

相关函数

1)排序函数:对数组元素进行排序,都是按照ASCII码进行比较,可以进行英文比较

  • sort():顺序排序(下标重排)

  • rsort():逆序排序(下标重排)

  • shuffle():随机打乱数组元素,数组下标会重排

2)指针函数

  • reset():重置指针,将数组指针回到首位
  • end():重置指针,将数组指针指导最后一个元素
  • next():指针下移,取得下一个元素的值
  • prev():指针上移,取得上一个元素的值
  • current():获取当前指针对应的元素值
  • key():获取当前指针对应的下标值

注意事项:next和prev会移动指针,有可能导致指针越界,导致数组不能使用,通过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/>';//下标:1

3)其他函数

  • count():统计数组中元素的数量
  • array_push():往数组中加入一个元素(尾插)
  • array_pop():从数组中取出一个元素(尾删)
  • array_shift():从数组中取出一个元素(头删)
  • array_unshift():从数组中加入一个元素(头插)
  • array_reverse():数组元素反过来 --逆置数组
  • in_array(数值,数组):判断一个元素在数组中是否存在
  • array_keys():获取一个数组的所有下标,返回一个索引数组
  • array_values():获取一个数组的所有值,返回一个索引数组

相关题目

求斐波那契数

//求第n个斐波那契数
// 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);

猜你喜欢

转载自blog.csdn.net/chuxinchangcun/article/details/132451132