百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

「PHP8入门指南」字符串与数组详解

toyiye 2024-06-21 12:39 19 浏览 0 评论

前言:

前面我们已经学习了PHP的八大数据类型,分别是整型、浮点型、布尔型、字符串型、数组、对象、资源以及null。而为了方便我们接下来更深入的学习,我们本篇主要将对字符串和数组给大家做一个深入地具体地介绍和总结。

首先,我们通过之前的篇章已经知道了字符串是标量数据类型,而数组则是复合数据类型。数组可以包含字符串、整型、浮点型、布尔型甚至对象和null。那字符串呢?它可以包含数组吗?或者说,我们能否把一个字符串变量理解为是一个字符串数组变量呢?能否通过访问数组的方式,访问一个字符串?而一个数组又能否转为一个字符串呢?带着以上种种的问题,我们开始这个篇章的学习吧!


字符串


什么是字符串?字符串是怎么存储的?


字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。

字符串在存储上类似字符数组,它每一位单个元素都是能提取的,字符串的零位是它的长度,如s[0]=10,这提供给我们很多方便,例如高精度运算时每一位都能转化为数字存入数组。


在PHP中,一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。字符串变量用于存储并处理文本。在创建字符串后,我们就可以对它进行操作。

例:

<?php
$str = 'hello world';
echo $str;

运行结果:



注意:定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。在32位版本中,字符串最大可以达到2GB(最多2147483647 字节)


双引号

如果字符串是包围在双引号(")中, PHP 将对以下特殊的字符进行解析:


和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来。

用双引号定义的字符串最重要的特征是变量会被解析。


字符串的操作


字符串并置运算(字符串连接)

在今后开发中,字符串的并置运算是最频繁的一个字符串操作之一。字符串的并置运算通过字符串连接符(.)来完成。

例:

<?php
$str = 'hello world';
$str1 = 'today is a nice day!';
echo $str.' '.$str1;

运行结果:



strlen()函数

通过调用PHP内置函数strlen(),我们可以知道字符串值的长度。

例:

<?php
$str2 = "abc";
$len2 = strlen($str2);
echo $len2."\n";
// 1个中文字符长度等于3个英文字符
$str3 = "程序员菜菜";
$len3 = strlen($str3);
echo $len3."\n";

运行结果:



strpos()函数


strpos()

返回字符串在另一字符串中第一次出现的位置(大小写敏感)。

stripos()

返回字符串在另一字符串中第一次出现的位置(大小写不敏感)。

例:

<?php
$str = "heLlo world";
$pos1 = strpos($str,"l");
echo "大小写敏感:".$pos1."\n";
$pos2 = stripos($str,"l");
echo "大小写不敏感:".$pos2."\n";

运行结果:



strrev()函数

通过调用strrev()函数,我们可以反转一个字符串。

例:

<?php
$str = "heLlo world";
echo "反转之前:".$str."\n";
echo "反转之后:".strrev($str);

运行结果:



substr()系列函数

substr()

返回字符串的一部分。多用于截取字符串。

substr_compare()

从指定的开始位置(二进制安和选择性区分大小写)比较两个字符串

substr_count()

计算子串在字符串中出现的次数

substr_replace()

把字符串的一部分替换为另一个字符串。

例:

<?php
$str = "heLlo world";
echo "原始字符串:".$str."\n";
// 第一个参数:字符串
// 第二个参数:字符串开始位置下标,从0开始到字符串长度减一结束
// 第三个参数:要截取的字符串的长度
echo "substr:".substr($str,0,5)."\n";
$subStr1 = "world";
// 第一个参数:主字符串
// 第二参数:次字符串
// 第三个参数:从哪个位置开始比较
// 第四个参数:比较长度 一般以第二参数次字符串长度为准
// 当相同时,返回0,不相同,返回-1
echo "substr_compare:".substr_compare($str,$subStr1,0,strlen($subStr1))."\n";
echo "substr_compare:".substr_compare($str,$subStr1,6,strlen($subStr1))."\n";
// 返回子串在主串中出现的次数
$subStr2 = "o";
echo "substr_count:".substr_count($str,$subStr2)."\n";


$subStr3 = "Tom";
echo "substr_replace:".substr_replace($str,$subStr3,6);

运行结果:



trim()函数


trim()

移除字符串两侧的空白字符或其他字符

ltrim()

移除字符串左侧的空白字符或其他字符

rtrim()

移除字符串右侧的空白字符或其他字符

例:

<?php
$str = " heLlo world ";
echo "trim:".trim($str)."\n";
echo "ltrim:".ltrim($str)."\n";
echo "rtrim:".rtrim($str)."\n";

运行结果:



str_replace()函数

str_replace()

替换字符串中的一些字符(大小写敏感)

str_ireplace()

替换字符串中的一些字符(大小写不敏感)

例:

<?php
$str = "heLlo world";
echo "原始字符串:" . $str . "\n";
$subStr1 = "Tom";
// 第一个参数:被替换的字符串
// 第二个参数:替换的字符串
// 第三个参数:主字符串
echo str_replace("world", $subStr1, $str) . "\n";
// 大小写不敏感测试
echo str_replace("WORLD", $subStr1, $str) . "\n";
echo str_ireplace("WORLD", $subStr1, $str) . "\n";

运行结果:



字符串大小转换相关函数


strtolower()

把字符串转换为小写字母。

strtoupper()

把字符串转换为大写字母。

ucfirst()

把字符串中的首字符转换为大写

ucwords()

把字符串中每个单词的首字符转换为大写

例:

<?php
$str1 = "hello world";
echo "strtoupper:".strtoupper($str1)."\n";
$str2 = "HELLO WORLD";
echo "strtolower:".strtolower($str2)."\n";
echo "ucfirst:".ucfirst($str1)."\n";
echo "ucwords:".ucwords($str1)."\n";

运行结果:



关于字符串相关的PHP内置函数还有很多,更多内置函数的介绍和使用,请大家查阅PHP官方文档,自己进行学习了解。今天由于篇幅限制,关于字符串的介绍和使用暂时就讲到这。

https://www.php.net/manual/zh/function.strpos.php


数组

PHP 中的数组实际上是一个有序映射。映射是一种把值关联到索引的类型。此类型针对多种不同用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。由于数组的值可以是其它数组所以树形结构和多维数组也是允许的。

在PHP中,有三种类型的数组:

      1. 数值数组-索引为整型数字的数组
      2. 关联数组-索引为字符串的数组
      3. 多维数组-包含一个或多个数组的数组


数组的创建方式


  1. 内置函数array()
  2. 中括号[]


例:

<?php
// 内置函数
$arr1 = array(1,2,3);
// 中括号方式
$arr2 = [4,5,6];
var_export($arr1);
echo "\n";
var_export($arr2);

运行结果:



在PHP数组中索引(key)可以是整型或字符串型。值(value)可以是任意类型。


注意:

PHP数组中的索引在以下情况时,会自动类型强制转换:

  • String 中包含有效的十进制 int,除非数字前面有一个 + 号,否则将被转换为 int 类型。例如键名 "8" 实际会被储存为 8。另外, "08" 不会被强制转换,因为它不是一个有效的十进制整数。
  • 例:
<?php
$arr1 = array(
    "8" => "这是键为字符串8的",


);
var_dump($arr1,array_keys($arr1));
echo "===================\n";
$arr2 = array(
    "8" => "这是键为字符串8的",
    8 => "这是键为整型8的"
);
var_dump($arr2,array_keys($arr2));

运行结果:



  • Float 也会被转换为 int ,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。

例:

<?php
$arr = array(
    8.8 => "这是键为整型8的"
);
var_dump($arr);

运行结果:


注意:当发生浮点数类型转换时,PHP会报【反对】提示。


  • Bool 也会被转换成 int。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
  • 例:
  • <?php
    $arr = array(
    true => "布尔型转换",
    false => "布尔型转换"
    );
    var_dump($arr);
  • 运行结果:



  • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
  • 例:

  • <?php
    $arr = array(
    null => "null转换",
    );
    var_dump($arr);

  • 运行结果:



  • Array 和 object 不能 被用为键名。坚持这么做会导致警告:Illegal offset type。


如果在数组定义时多个元素都使用相同键名,那么只有最后一个会被使用,其它的元素都会被覆盖

例:

<?php
$arr = array(
    1 => 1,
    1 => "1",
    "菜菜" => "公众号",
    "菜菜" => "公众号:程序员菜菜"
);
var_dump($arr);

运行结果:


如果在对数组进行声明及初始化时,对某些元素的键不做指定,那PHP会自动赋予键名,规则从之前最大的整数键名加1开始。

例:

<?php
$arr = array(
    1 => 1,
    "菜菜" => "公众号:程序员菜菜",
    "欢迎大家关注",
    5 => "今天是晴天",
    8 //这个元素未指定键名,所以PHP自动赋予键名整型6
);
var_dump($arr);

运行结果:



数组元素的访问

在PHP中,我们通过指定的索引(key)来访问对应的值(value)。

例:

<?php
$arr = array(
    1 => 1,
    "菜菜" => "公众号:程序员菜菜",
    "欢迎大家关注",
    5 => "今天是晴天",
    8 //这个元素未指定键名,所以PHP自动赋予键名整型6
);
var_dump($arr);
var_dump($arr["菜菜"]);
var_dump($arr[2]);
var_dump($arr[5]);

运行结果:



注意:应该始终在用字符串表示的数组索引上加上引号。


通过以上数组元素的访问方式,我们能否也通过指定数字索引(key)的方式访问字符串中的元素呢?

例:

<?php
$str = "hello";
echo "访问字符串中的第一个字符:".$str[0];
echo "\n";
echo "访问字符串中的最后一个字符:".$str[strlen($str)-1];
$str2 = "程序员菜菜";
echo "访问字符串中的第一个字符:".$str2[0];
echo "\n";
echo "访问字符串中的最后一个字符:".$str2[strlen($str2)-1];

运行结果:


注意:通过以上运行结果,我们可以看出,当字符串所含元素全为英文字符时,通过下标方式访问是有效的,而对中文字符串无效。


数组常用函数

count() 返回数组所含元素数量。

例:

<?php
$arr = [1,2,3];
$count = count($arr);
var_dump($count);

运行结果:


is_array() 判断一个变量是否是数组。

例:

<?php
$arr = ["菜菜","的","微信","公众号","程序员菜菜"];
var_dump(is_array($arr));


$str = "菜菜的微信公众号:程序员菜菜";
var_dump(is_array($str));

运行结果:




in_array() 检查数组中是否存在某个值

例:


<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}

运行结果:




array_push() 将一个或多个元素插入数组的末尾(入栈)

例:

<?php
$arr = [1,2,3];
array_push($arr,4,5,6,7);
var_export($arr);
echo "\n============\n";
$arr1 = [8,9,10];
array_push($arr,$arr1);
var_export($arr);

运行结果:



注意:在将一个数组入栈到目标数组时,是将整个数组压入,而不是将其元素一一压入。

array_pop() 删除数组中的最后一个元素。

例:

<?php
$arr = [1,2,3];
var_export($arr);
echo "\n";
array_pop($arr);
var_export($arr);

运行结果:



array_unshift() 在数组开头插入一个或多个元素

array_shfit() 在数组的第一个元素,并返回被删除元素的值

例:

<?php
$arr = [1,2,3];
var_export($arr);
echo "\n";
array_unshift($arr,4,5,6);
var_export($arr);
echo "\n";
$val = array_shift($arr);
echo "被删除元素的值:".$val;

运行结果:



sort() 对数值数组进行升序排序。

例:

<?php
$arr = [5,4,3,2,1];
echo "排序前:";
var_export($arr);
echo "\n";
sort($arr);
echo "排序后:";
var_export($arr);

运行结果:



array_slice() 返回数组中的选定部分。多用于分割数组。

例:

<?php
$arr = [5,4,3,2,1];
echo "分割前:";
var_export($arr);
echo "\n";
$subArr = array_slice($arr,0,3);
var_export($subArr);

运行结果:



array_merge() 把一个或多个数组合并为一个数组

例:

<?php
$arr1 = [3,2,1];
$arr2 = [4,5,6];
$arr3 = [7,8,2];
$arr = array_merge($arr1,$arr2,$arr3);
var_export($arr);

运行结果:



array_keys() 返回数组中的所有键名。

array_values() 返回数组中的所有值。

例:

<?php
$arr = [
    "菜菜"=>23,
    "帅哥"=>"菜菜",
    3 => "嗨嗨嗨"
];
var_export(array_keys($arr));
echo "\n";
var_export(array_values($arr));

运行结果:



字符串与数组互转

PHP还提供了两个重要内置函数来方便我们对字符串和数组进行相互转换。它们分别是:

implode() 用字符串连接数组元素

explode() 使用一个字符串分割另一个字符串

例:

<?php
$arr = ["菜菜","的","微信","公众号","程序员菜菜"];
var_dump(implode("",$arr));


$str = "菜菜的微信公众号:程序员菜菜";
var_export(explode(":",$str));

运行结果:


相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码