【PHP】字符串数组

news2024/11/16 14:24:17

文章目录

  • 字符串类型
    • 字符串转义
    • 字符串相关函数
  • 数组
    • 定义方式
    • 数组特点
    • 二维数组
    • 数组遍历
    • foreach遍历语法
    • for循环遍历数组
    • 相关函数
    • 相关题目

字符串类型

定义语法

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

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/929347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python的图书馆大数据可视化分析系统设计与实现【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java、Python等技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; …

vscode 与 C++

序 具体流程的话&#xff0c;官方文档里都有的&#xff1a;C programming with Visual Studio Code 浏览器下载一个mingw64&#xff0c;解压&#xff0c;配置环境变量vscode里安装c相关的插件没了 第一步只看文字&#xff0c;可能有点抽象&#xff0c;相关视频&#xff1a; …

云计算企业私有云平台建设方案PPT

导读&#xff1a;原文《云计算企业私有云平台建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以点赞评论转发本文&#xff0c;…

Linux常用命令_权限管理命令

文章目录 1. 权限管理命令: chmod2. 其他权限管理命令2.1 权限管理命令: chown2.2 权限管理命令: chgrp2.3 权限管理命令: umask 1. 权限管理命令: chmod {ugoa}中分别为&#xff1a;u-user、g-group、a-all&#xff1b;谁创建文件&#xff0c;谁是所有者&#xff1b;所属组为所…

HOOPS Exchange SDK 2023 Service Pack 2 Crack

内容摘自互联网&#xff0c;具体功能以官网介绍为准。。。 HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品&#xff0c;专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来&#xff0c;HOOPS通过卓越的3D技术&#xff0c;帮助全球600多家知名客户推动3D软件创新…

Qt ui对某控件进行全局提升报错:no such file or directory

问题 在Qt项目中&#xff0c;设计师界面&#xff0c;对某一控件进行提升&#xff0c;设置完“提升的类名称”、“头文件”、全局包含后&#xff0c;构建时&#xff0c;报“no such file or directory”错误&#xff0c;但文件命名存在呀。 解决 根据问题就应该明白&#xf…

并查集(C++实现)

目录 一、并查集原理 二、并查集应用 2.1 并查集举例 2.2 并查集数组规律 2.3 并查集功能 三、并查集实现 3.1 并查集 3.2 根据名字查找 四、例题 4.1 省份数量 4.2 等式方程的可满足性 一、并查集原理 再一些应用问题中&#xff0c;需要将n个不同的元素划分成一些…

Python读取Excel:实现数据高效处理的利器

目录 一、Python读取Excel的常用库二、Python读取Excel的步骤三、具体案例和使用场景四、Python读取Excel的优势与其他编程语言比较 摘要 本文将介绍Python读取Excel的方法&#xff0c;并通过具体案例和使用场景展示如何实现数据高效处理。我们将介绍常用的Python库&#xff0c…

QT基础使用:组件和代码关联(信号和槽)

自动关联 ui文件在设计环境下&#xff0c;能看到的组件可以使用鼠标右键选择“转到槽”就是开始组件和动作关联。 在自动关联这个过程中软件自动动作的部分 需要对前面头文件进行保存&#xff0c;才能使得声明的函数能够使用。为了方便&#xff0c;自动关联时先对所有文件…

【Hello Algorithm】堆和堆排序

本篇博客简介&#xff1a; 讲解堆和堆排序相关算法 堆和堆排序 堆堆的概念堆的性质堆的表示形式堆的增加删除堆的最大值 堆排序堆排序思路时间复杂度为N的建堆方法已知一个近乎有序的数组 使用最佳排序方法排序 堆 堆的概念 这里注意&#xff01;&#xff01;&#xff01; 这…

日志系统——性能测试

日志系统项目已经编写完成&#xff0c;在本节完成性能测试之后就正式结束了 测试代码如下 #include "../logs/mjwlog.h" #include <vector> #include <thread>//参数&#xff1a;日志器名称&#xff0c;线程数量&#xff0c;输出日志条数&#xff0c;单…

nginx(七十八)nginx配置http2

一 ngx_http_v2模块 1、本文不讲解HTTP2的知识2、只讲解nginx中如何配置HTTP2 ① 前置条件 1、openssl的版本必须在1.0.2e及以上2、开启https加密,目前http2.0只支持开启了https的网站编译选项&#xff1a;--with-http_ssl_module --with-http_v2_module 特点&#xff1a…

【翻译】RISC-V指令集手册第Ⅱ卷:特权体系结构

第三章 机器级ISA&#xff0c;版本1.11 本章描述RISC-V系统中最高权限的机器模式(M-mode)下的机器级操作。M模式用于对硬件平台的低级访问&#xff0c;是复位时进入的第一个模式。M模式还可以用于实现在硬件中直接实现过于困难或代价过高的特性。RISC-V机器级ISA包含一个公共核…

Android Studio升级到Android API 33版本后,XML布局输入没有提示

低版本的Android Studio升级到Android API 33版本后&#xff0c;XML布局输入没有提示。查一下我目前使用的Android Studio 是2021年发布&#xff0c;而Android API 33是2022年发布的&#xff0c;这是由低版本升级到高版本造成不兼容的问题。解决方法有两种&#xff1a; 第一种…

1 Hadoop入门

1.Hadoop是什么&#xff1f; (1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 (2)主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。 (3)广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈 2.Hadoop的优势 3 Hadoop组成 4 HDF…

如何将储存在Mac或PC端的PDF文件传输到移动设备呢?

iMazing是一款iOS设备管理软件&#xff0c;用户借助它可以将iPad或iPhone上的文件备份到PC或Mac上&#xff0c;还能实现不同设备之间的文件传输&#xff0c;能很大程度上方便用户进行文件管理。 在阅读方面&#xff0c;iPad和iPhone是阅读PDF的优秀选择&#xff0c;相较于Mac或…

IDEA常用配置之类Tab页多行显示

文章目录 IDEA常用配置之类Tab页多行显示 IDEA常用配置之类Tab页多行显示 默认在Idea中打开类过多&#xff0c;后面会隐藏显示&#xff0c;这里修改配置&#xff0c;将类设置为多行显示&#xff0c;方便查找已经打开的类 修改后显示样式

抢先体验|乐鑫推出 ESP32-S3-BOX-3 新一代开源 AIoT 开发套件

乐鑫科技 (688018.SH) 非常高兴地宣布其开发套件阵容的最新成员 ESP32-S3-BOX-3。这款完全开源的 AIoT 应用开发套件搭载乐鑫高性能 ESP32-S3 AI SoC&#xff0c;旨在突破传统开发板&#xff0c;成为新一代开发工具的引领者。 【乐鑫新品抢先体验】ESP32-S3-BOX-3 新一代开源 A…

ctfshow-web13 文件上传

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先看到是一个上传页面&#xff0c;测试其他无果&#xff0c;遂进行目录遍历&#xff0c;发现upload.php.bak文件 可以看到这里的限制条件&#xff0c;大小&#xff0c;以及内容&#xff0c;这里可以使用.use…

DataWhale夏令营第三期-CV赛道-第三次打卡

第三次打卡 使用resnet18训练精度&#xff1a;评分0.74 使用resnet34精度&#xff1a;评分0.74 使用resnet50精度&#xff1a;评分0.21&#xff0c;不知道为什么网络层数高反而准确度下降&#xff0c;猜测层数多丢失了一些特征信息。