PHP 零基础入门笔记(11):字符串 String

简介: PHP 零基础入门笔记(11):字符串 String

字符串 String

字符串类型

单引号字符串

双引号字符串

nowdoc 字符串

heredoc 字符串

示例


<?php
// 1、单引号字符串
$str1 = 'hello world';
var_dump($str1);
// string(11) "hello world"
// 2、双引号字符串
$str2 = "hello world";
var_dump($str2);
// string(11) "hello world"
// 3、nowdoc
$str2 = <<<'EOD'
hello world
EOD;
var_dump($str2);
// string(11) "hello world"
// 4、heredoc
$str1 = <<<EOD
hello world
EOD;
var_dump($str1);
// string(11) "hello world"

字符串转义

系统会特殊处理:反斜杠 + 字母


例如:


\r\n 回车换行

PHP 中常用的转义字符


\'  在单引号字符串中显示单引号
\"  在双引号字符串中显示双引号
\r  回车(回到当行的行首)
\n  换行
\t  tab
\$  $在PHP中作为变量符号

单引号和双引号的区别

1、单引号中能够识别\', 而双引号中不能识别\'


<?php
$str1 = 'hello \'world';
$str2 = "hello \'world";
var_dump($str1);
// string(12) "hello 'world"
var_dump($str2);
// string(13) "hello \'world"

2、单引号中不能识别变量,而双引号中能识别$,解析变量


变量本省需要与后面内容有区分,保证变量独立性

使用变量标识符区分,加一组大括号{}

<?php
$a = 'Tom';
$str1 = 'hello $a world';
var_dump($str1);
// string(14) "hello $a world"
$str2 = "hello $a world";
var_dump($str2);
// string(15) "hello Tom world"
$str3 = "hello $aworld";
var_dump($str3);
// PHP Notice:  Undefined variable: aworld
$str4 = "hello {$a}world";
var_dump($str4);
// string(14) "hello Tomworld"

结构化定义字符串变量的规则

结构化定义字符串对应的边界符有条件

上边界符后面不能有任何内容

下边界符必须最左边顶格

下边界符后面只能跟符号,不能跟任何字符

结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身

<?php
$str1 = <<<EOD
hello world
EOD;
var_dump($str1);
// string(11) "hello world"

字符串长度

strlen(string $string): int

示例


<?php
$str1 = 'hello world';
$str2 = '你好世界'; // 中文在utf8字符集下占3个字节
var_dump(strlen($str1)); // int(11)
var_dump(strlen($str2)); // int(12)

多字节字符串扩展模块 mbstring(Multi String)


<?php
$str1 = 'hello world';
$str2 = '你好世界';
var_dump(mb_strlen($str1)); // int(11)
var_dump(mb_strlen($str2)); // int(4)

字符串相关函数

1、转换函数


implode — 将一个一维数组的值转化为字符串
implode(string $glue, array $pieces): string
implode(array $pieces): string
print_r(implode('|', ['北京', '上海', '广州']));
// 北京|上海|广州

explode — 使用一个字符串分割另一个字符串


explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
print_r(explode('|', '北京|上海|广州'));
// Array
// (
//     [0] => 北京
//     [1] => 上海
//     [2] => 广州
// )

str_split — 将字符串转换为数组


str_split(string $string, int $split_length = 1): array
// 注意:中文字符拆分有问题
print_r(str_split('helloworld', 5));
// Array
// (
//     [0] => hello
//     [1] => world
// )

2、截取函数


trim — 去除字符串首尾处的空白字符(或者其他字符)


trim(string $str, string $character_mask = " \t\n\r\0\x0B"): string

ltrim — 删除字符串开头的空白字符(或其他字符)


ltrim(string $str, string $character_mask = ?): string

rtrim — 删除字符串末端的空白字符(或者其他字符)


rtrim(string $str, string $character_mask = ?): string

示例


<?php
var_dump(trim(' 你好,世界 '));
// string(15) "你好,世界"
var_dump(ltrim(' 你好,世界 '));
// string(16) "你好,世界 "
var_dump(rtrim(' 你好,世界 '));
// string(16) " 你好,世界"

substr — 返回字符串的子串


substr(string $string, int $offset, ?int $length = null): string
// 注意:中文字符截取有问题
var_dump(substr('Hello World', 6, 5));
// string(5) "Worl

strstr — 返回 haystack 字符串从 needle 第一次出现的位置开始到结尾的字符串(取文件后缀名)


strstr(string $haystack, mixed $needle, bool $before_needle = false): string
var_dump(strstr('Hello,World', 'W'));
// string(5) "World"

3、大小写转换


strtolower — 将字符串转化为小写


strtolower(string $string): string

strtoupper — 将字符串转化为大写


strtoupper(string $string): string

ucfirst — 将字符串的首字母转换为大写


ucfirst(string $str): string

示例


var_dump(strtolower('Hello, World'));
// string(12) "hello, world"
var_dump(strtoupper('Hello, World'));
// string(12) "HELLO, WORLD"
var_dump(ucfirst('hello, world'));
// string(12) "Hello, world"

4、查找函数


strpos — 返回 needle 在 haystack 中首次出现的数字位置。


strpos(string $haystack, mixed $needle, int $offset = 0): int
var_dump(strpos('Hello, World', 'o'));
// int(4)

strrpos — 返回字符串 haystack 中 needle 最后一次出现的数字位置。


strrpos(string $haystack, string $needle, int $offset = 0): int
var_dump(strrpos('Hello, World', 'o'));
// int(8)

5、替换函数


str_replace — 子字符串替换, 该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。


str_replace(
    mixed $search,
    mixed $replace,
    mixed $subject,
    int &$count = ?
): mixed
var_dump(str_replace('o', 'A', 'Hello, World'));
// string(12) "HellA, WArld"

6、格式化函数


printf — 输出格式化字符串


printf(string $format, mixed $args = ?, mixed $... = ?): int

sprintf — 返回格式化字符串


sprintf(string $format, mixed ...$values): string

格式化参数:https://www.php.net/manual/zh/function.sprintf.php


// 直接输出,返回数字
$ret1 = printf('my name is %s, and year old is %d', 'Tom', 18);
// my name is Tom, and year old is 18
var_dump($ret1); // int(34)
// 返回字符串
$ret2 = sprintf('my name is %s, and year old is %d', 'Tom', 18);
var_dump($ret2);
// string(34) "my name is Tom, and year old is 18"

7、其他


str_repeat — 重复一个字符串


str_repeat(string $input, int $multiplier): string
echo str_repeat('ABC', 5);
// ABCABCABCABCABC

str_shuffle — 随机打乱一个字符串


str_shuffle(string $str): string
echo str_shuffle('ABCDEFG');
// GBEACDF
相关文章
|
6天前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
32 1
|
12天前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
7天前
|
存储 JSON NoSQL
揭秘Redis字符串String的隐藏技能!从基础到进阶,让你的数据存储操作秒变高大上!
【8月更文挑战第24天】Redis中的字符串类型作为其基石,不仅能够存储从简单文本到复杂格式如JSON的各种数据,还能通过多样化的命令实现包括但不限于自增自减、设置过期时间等高级功能,极大提升了其实用性和灵活性。例如,使用`SET`命令可添加或更新键值对,`GET`获取值,`DEL`删除键;同时,`INCR`和`DECR`支持对整数值的原子性增减操作,非常适合实现计数器等功能;通过`EXPIRE`命令设置过期时间,则适用于需要限时存储的应用场景。尽管名为“字符串”,但实际上还可存储图片、音频文件的Base64编码等形式的数据,为开发者提供了强大而灵活的工具。
20 0
|
9天前
|
存储 Java
|
12天前
|
缓存 安全 Java
【揭秘】String vs StringBuilder vs StringBuffer:三大字符串类的秘密较量!你真的知道何时该用哪个吗?
【8月更文挑战第19天】探讨Java中`String`、`StringBuilder`与`StringBuffer`的区别及应用场景。`String`不可变,适合做哈希表键或多线程共享。`StringBuilder`支持动态修改字符串,适用于单线程环境以提高性能。`StringBuffer`与`StringBuilder`功能相似,但线程安全。示例代码展示各类型的基本用法。选择哪种类型取决于具体需求和性能考量。
23 0
|
2月前
|
Java 开发者 Python
Python中,字符串(String)是一种不可变的数据类型
Python中,字符串(String)是一种不可变的数据类型
|
2月前
|
存储 NoSQL Redis
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
遍历字符串,String line = xxx for(int i = 0;i<line.length();i++){system.out.println(line.chartAt(i)); 单个
遍历字符串,String line = xxx for(int i = 0;i<line.length();i++){system.out.println(line.chartAt(i)); 单个
String对象的特点,new创建的字符串对象地址值不同,String s3 = “abc“; s4=“abc“ sout(s1 == s2)比较地址和内容,s1.equals(s3)比较内容
String对象的特点,new创建的字符串对象地址值不同,String s3 = “abc“; s4=“abc“ sout(s1 == s2)比较地址和内容,s1.equals(s3)比较内容
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
下一篇
云函数