您的位置 首页 php

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

前言:

前面我们已经学习了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官方文档,自己进行学习了解。今天由于篇幅限制,关于字符串的介绍和使用暂时就讲到这。

数组

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

运行结果:

文章来源:智云一二三科技

文章标题:「PHP8入门指南」字符串与数组详解

文章地址:https://www.zhihuclub.com/148853.shtml

关于作者: 智云科技

热门文章

网站地图