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
相关文章
|
3月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
58 1
|
14天前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
29 4
|
26天前
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
33 5
|
1月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
39 3
|
2月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
2月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
3月前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
68 0
|
3月前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
125 0
|
3月前
|
存储 JSON NoSQL
揭秘Redis字符串String的隐藏技能!从基础到进阶,让你的数据存储操作秒变高大上!
【8月更文挑战第24天】Redis中的字符串类型作为其基石,不仅能够存储从简单文本到复杂格式如JSON的各种数据,还能通过多样化的命令实现包括但不限于自增自减、设置过期时间等高级功能,极大提升了其实用性和灵活性。例如,使用`SET`命令可添加或更新键值对,`GET`获取值,`DEL`删除键;同时,`INCR`和`DECR`支持对整数值的原子性增减操作,非常适合实现计数器等功能;通过`EXPIRE`命令设置过期时间,则适用于需要限时存储的应用场景。尽管名为“字符串”,但实际上还可存储图片、音频文件的Base64编码等形式的数据,为开发者提供了强大而灵活的工具。
47 0
|
3月前
|
存储 Java