PHP字符串处理常用函数,substr、explode
前言
PHP字符串处理天天用,截取、拼接、查找、替换,每个项目都离不开。本文整理最常用的字符串函数,收藏随用随查。
一、字符串长度
strlen()
字节长度(中文算3个字节):
echo strlen('hello'); // 5
echo strlen('你好'); // 6(UTF-8每个中文3字节)
mb_strlen()
字符长度(中文算1个字符):
echo mb_strlen('你好', 'utf-8'); // 2
区别: strlen看字节,mb_strlen看字符。
二、截取字符串
substr()
$str = 'hello world';
// 从第0位取5个
echo substr($str, 0, 5); // hello
// 从第6位取到最后
echo substr($str, 6); // world
// 从倒数第5位取
echo substr($str, -5); // world
mb_substr()(中文截取)
$str = '我是中国人';
// 从第0个字符取2个
echo mb_substr($str, 0, 2, 'utf-8'); // 我是
注意: 中文一定要用mb_substr,不然会乱码。
三、查找字符串
strpos()
找位置(从左找,找到返回位置,没找到返回false):
$str = 'hello world';
echo strpos($str, 'world'); // 6
// 没找到
var_dump(strpos($str, 'abc')); // bool(false)
strrpos()
从右找:
echo strrpos('a/b/c', '/'); // 3
strstr()
找并截取:
$str = 'user@example.com';
echo strstr($str, '@'); // @example.com
str_contains()(PHP8)
var_dump(str_contains('hello world', 'world')); // bool(true)
注意: PHP8以上才有。
四、替换字符串
str_replace()
$str = 'hello world';
echo str_replace('world', 'php', $str); // hello php
str_ireplace()
不区分大小写:
echo str_ireplace('WORLD', 'php', $str); // hello php
preg_replace()
正则替换:
$str = '2026-10-09';
// 把横线换成点
echo preg_replace('/-/g', '.', $str); // 2026.10.09
五、拼接和拆分
implode()(数组转字符串)
$arr = ['a', 'b', 'c'];
echo implode(',', $arr); // a,b,c
echo implode('-', $arr); // a-b-c
explode()(字符串转数组)
$str = 'a,b,c';
$arr = explode(',', $str);
// ['a', 'b', 'c']
限制拆分次数
$str = 'a,b,c,d';
// 只拆成2段
$arr = explode(',', $str, 2);
// ['a', 'b,c,d']
六、去除空白
trim()
去首尾空格:
$str = ' hello ';
echo trim($str); // hello
ltrim() / rtrim()
ltrim($str); // 去左边
rtrim($str); // 去右边
七、大小写转换
strtoupper('hello'); // HELLO
strtolower('HELLO'); // hello
ucwords('hello world'); // Hello World
ucfirst('hello'); // Hello
八、重复和填充
str_repeat()
echo str_repeat('ab', 3); // ababab
str_pad()
// 补到10位,右边补*
echo str_pad('123', 10, '*', STR_PAD_RIGHT); // 123*******
// 左边补
echo str_pad('123', 10, '0', STR_PAD_LEFT); // 0000000123
九、常见场景
场景1:手机号中间打星号
$phone = '13812345678';
echo substr($phone, 0, 3) . '****' . substr($phone, -4);
// 138****5678
场景2:截取文件名后缀
$file = 'photo.jpg';
echo strrchr($file, '.'); // .jpg
场景3:邮箱拆分
$email = 'user@example.com';
$name = strstr($email, '@', true); // user
$domain = strstr($email, '@'); // @example.com
场景4:URL参数解析
$url = 'https://example.com/index.php?id=1&name=zhangsan';
// 拿问号后面的
$query = parse_url($url, PHP_URL_QUERY);
// id=1&name=zhangsan
parse_str($query, $params);
// ['id' => '1', 'name' => 'zhangsan']
场景5:HTML标签转义
$str = '<script>alert(1)</script>';
echo htmlspecialchars($str);
// <script>alert(1)</script>
十、常见坑
坑1:中文截取乱码
用substr截中文,结果乱码了。
原因: substr按字节截,中文一个字3个字节,容易截到半个字。
解决: 用mb_substr:
mb_substr($str, 0, 10, 'utf-8');
坑2:strpos===0的问题
$str = 'abc';
if (strpos($str, 'a') == false) {
echo '没找到';
}
问题: strpos找到a在位置0,0==false是true。
解决:
if (strpos($str, 'a') === false) {
echo '没找到';
}
注意: 一定要用===,不是==。
坑3:trim只去空格
trim默认只去空格和换行。
要去指定字符:
trim($str, "/"); // 去首尾的/
坑4:explode空字符串
$str = '';
$arr = explode(',', $str);
// [''] 不是空数组!
解决:
if ($str === '') {
$arr = [];
} else {
$arr = explode(',', $str);
}
总结
最常用的10个:
strlen()字符串长度(字节)mb_strlen()字符长度(中文友好)substr()截取字符串strpos()查找位置str_replace()替换explode()字符串转数组implode()数组转字符串trim()去空格strtoupper()/strtolower()大小写str_pad()填充
记住:
- 中文用mb_*系列函数
- 查找用=== false判断
- 数组字符串互转用explode/implode
遇到问题加QQ23979811 协助处理
PHP数组常用函数大全,array操作
前言
PHP数组用得最多,几乎每个脚本都要操作数组。本文整理最常用的数组函数,收藏起来随用随查。
一、创建和遍历
数组定义
<?php
// 索引数组
$arr = [1, 2, 3, 4, 5];
// 关联数组
$user = [
'name' => '张三',
'age' => 20,
'email' => 'zhangsan@qq.com'
];
遍历
// foreach遍历
foreach ($arr as $value) {
echo $value;
}
// 带key
foreach ($user as $key => $value) {
echo "$key: $value";
}
二、增删改查
添加元素
// 末尾加
$arr[] = 6;
array_push($arr, 7, 8);
// 开头加
array_unshift($arr, 0);
// 关联数组加
$user['phone'] = '13800138000';
删除元素
// 删最后一个
array_pop($arr);
// 删第一个
array_shift($arr);
// 删指定key
unset($user['age']);
// 删多个
unset($arr[0], $arr[1]);
修改元素
$arr[0] = 100;
$user['name'] = '李四';
查找元素
// 值是否在数组里
in_array(3, $arr); // true
// 找key
array_key_exists('name', $user); // true
// 找值的key
array_search(2, $arr); // 1
三、数组统计
长度
count($arr);
sizeof($arr); // 和count一样
求和、最大、最小
array_sum($arr); // 求和
max($arr); // 最大
min($arr); // 最小
去重
$unique = array_unique($arr);
打乱
shuffle($arr);
四、排序
索引数组排序
sort($arr); // 升序
rsort($arr); // 降序
关联数组排序
asort($user); // 按值升序
arsort($user); // 按值降序
ksort($user); // 按key升序
krsort($user); // 按key降序
五、拆分和合并
取一段
// 从第2个开始取3个
$slice = array_slice($arr, 1, 3);
合并数组
$arr1 = [1, 2];
$arr2 = [3, 4];
$merge = array_merge($arr1, $arr2); // [1,2,3,4]
交差
$arr1 = [1, 2, 3];
$arr2 = [2, 3, 4];
array_intersect($arr1, $arr2); // [2,3] 交集
array_diff($arr1, $arr2); // [1] 差集
六、key和value操作
取所有key
$keys = array_keys($user);
// ['name', 'age', 'email']
取所有value
$values = array_values($user);
// ['张三', 20, 'zhangsan@qq.com']
翻转key和value
$flipped = array_flip($user);
填充数组
// 5个元素,值都是0
$arr = array_fill(0, 5, 0);
七、数组和字符串互转
数组转字符串
$arr = ['a', 'b', 'c'];
$str = implode(',', $arr); // 'a,b,c'
字符串转数组
$str = 'a,b,c';
$arr = explode(',', $str); // ['a', 'b', 'c']
八、常用场景
场景1:数组去重
$arr = [1, 2, 2, 3, 3, 3];
$unique = array_unique($arr);
// [1, 2, 3]
场景2:查值在不在
$fruits = ['apple', 'banana', 'orange'];
if (in_array('apple', $fruits)) {
echo '有苹果';
}
场景3:二维数组按key排序
$users = [
['name' => '张三', 'age' => 20],
['name' => '李四', 'age' => 25],
['name' => '王五', 'age' => 18]
];
// 按age排序
array_multisort(array_column($users, 'age'), SORT_ASC, $users);
场景4:数组分页
$page = 1;
$pageSize = 10;
$offset = ($page - 1) * $pageSize;
$pageData = array_slice($allData, $offset, $pageSize);
场景5:过滤空值
$arr = ['a', '', null, 'b', 0, 'c'];
$filtered = array_filter($arr);
// ['a', 'b', 'c'] 空字符串、null、0都被过滤了
九、常见坑
坑1:count(null)报错
PHP7.2以后,count(null)会警告。
解决:
$count = is_array($arr) ? count($arr) : 0;
坑2:==和===的区别
in_array('123', [123]); // true(==)
in_array('123', [123], true); // false(===)
注意: 第三个参数true才是严格比较。
坑3:array_merge和+的区别
$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 3, 'c' => 4];
array_merge($arr1, $arr2); // ['a'=>1, 'b'=>3, 'c'=>4]
$arr1 + $arr2; // ['a'=>1, 'b'=>2, 'c'=>4]
区别: array_merge后者覆盖前者,+前者保留。
坑4:引用传递
foreach ($arr as &$value) {
$value = $value * 2;
}
unset($value); // 一定要unset,不然后面会出问题
总结
最常用的10个:
count()数组长度in_array()值是否在数组里array_key_exists()key是否存在array_unique()去重array_merge()合并array_slice()取一段array_sum()求和explode()字符串转数组implode()数组转字符串array_column()取二维数组某一列
遇到问题加QQ23979811 协助处理