php判断数组元素字符串长度_php遍历数组测长度法【教程】
发布时间 - 2026-01-25 00:00:00 点击率:次必须逐个判断类型再测长:strlen()仅支持字符串,对数组或非字符串元素会警告或返回错误结果;中文等多字节字符须用mb_strlen($v, 'UTF-8')并显式指定编码。
用 strlen() 遍历判断每个元素字符串长度
PHP 数组里混着字符串、数字、null 或其他类型时,不能直接对整个数组调用 strlen()——它只接受字符串,传数组会警告「Array to string conversion」并返回 strlen("Array")(即 5)。必须逐个取值判断类型再测长。
常见错误写法:strlen($arr) 或 array_map('strlen', $arr)(后者在含非字符串元素时会报 Warning 并返回 false)。
正确做法是先用 is_string() 过滤,再测长:
foreach ($arr as $item) {
if (is_string($item)) {
$len = strlen($item);
echo "字符串 '{$item}' 长度:{$len}\n";
}
}
array_map() + 匿名函数安全测长
想一行生成长度数组?array_map() 可以,但得自己兜底非字符串类型,否则出错或结果不可控。
- 返回
0表示非字符串(比返回false更利于后续计算) - 用三元运算避免 Warning:对非字符串统一返回
0 - 注意:PHP 8+ 中
strlen(null)会抛TypeError,所以必须提前判断
示例:
$lengths = array_map(function($v) {
return is_string($v) ? strlen($v) : 0;
}, $arr);
中文等多字节字符要用 mb_strlen()
如果数组里有中文、日文或 emoji,strlen() 返回的是字节数,不是字符数。比如 "你好" 的 strlen() 是 6(UTF-8 下每个汉字占 3 字节),而 mb_strlen("你好", 'UTF-8') 才是 2。
关键点:
- 不指定编码时,
mb_strlen()依赖mb_internal_encoding()设置,线上环境可能不一致 - 建议显式传
'UTF-8',尤其在 CLI 和 Web 环境混用时 - 若不确定输入编码,先用
mb_detect_encoding()探测(但该函数不可靠,慎用)
安全写法:
$lengths = array_map(function($v) {
return is_string($v) ? mb_strlen($v, 'UTF-8') : 0;
}, $arr);
性能敏感场景别在循环里重复调用 mb_internal_encoding()

有人会在匿名函数里每次调用 mb_internal_encoding('UTF-8') 来“确保编码”,这反而拖慢速度——该函数是全局设置,且频繁调用无意义。
真正要做的只有两件:
- 在脚本开头统一设好:
mb_internal_encoding('UTF-8'); - 所有
mb_*函数显式传编码参数,不依赖内部编码 - 避免在循环中做任何函数调用以外的逻辑,比如文件读取、数据库查询
复杂点在于:你得确认整个数据流从输入($_POST、JSON 解码、DB 查询)到输出全程编码一致。否则光修 mb_strlen() 没用。
# php
# js
# json
# 编码
# 字节
# String
# Array
# NULL
# strlen
# 字符串
# 循环
# 字符串类型
# 数据库
# 多字
# 先用
# 的是
# 你好
# 组里
# 才是
# 日文
# 遍历
# 会在
# 要做
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
如何在云指建站中生成FTP站点?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel如何生成API文档?(Swagger/OpenAPI教程)
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何登录建站主机?访问步骤全解析
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
php结合redis实现高并发下的抢购、秒杀功能的实例
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel如何使用Gate和Policy进行授权?(权限控制)
如何用景安虚拟主机手机版绑定域名建站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel中的Facade(门面)到底是什么原理
Laravel如何使用Sanctum进行API认证?(SPA实战)
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何使用Telescope进行调试?(安装和使用教程)
WEB开发之注册页面验证码倒计时代码的实现
如何基于云服务器快速搭建个人网站?
在Oracle关闭情况下如何修改spfile的参数
Laravel如何实现文件上传和存储?(本地与S3配置)
如何正确下载安装西数主机建站助手?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Laravel如何创建自定义Artisan命令?(代码示例)
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
高防服务器租用指南:配置选择与快速部署攻略
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
微信小程序 scroll-view组件实现列表页实例代码
详解vue.js组件化开发实践
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel distinct去重查询_Laravel Eloquent去重方法
Python3.6正式版新特性预览
高防服务器如何保障网站安全无虞?
Laravel如何创建自定义中间件?(Middleware代码示例)
JavaScript Ajax实现异步通信
iOS发送验证码倒计时应用
JS经典正则表达式笔试题汇总
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
免费视频制作网站,更新又快又好的免费电影网站?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
,在苏州找工作,上哪个网站比较好?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】

