不能。strlen()在php 7.0中仅接受字符串,传入数组会触发警告并返回5,无法获取元素个数或真实长度;正确做法是先用is_string()判断类型,再对字符串元素用mb_strlen($item, 'utf-8')测字符数。

不能。
strlen() 函数在 PHP 7.0 中只接受字符串类型参数,传入数组会触发 E_WARNING(警告),并把数组隐式转换为字符串 "Array",最终返回 strlen("Array") —— 即 5,这不是你想要的数组元素长度,而是毫无意义的固定值。
比如:
$arr = ['hello', '你好', 123]; echo strlen($arr); // 警告:Array to string conversion → 输出 5
这既没告诉你数组有多少个元素,也没告诉你每个元素的字符串长度,纯属误导。
✅ 正确做法:先判断类型,再逐个测长
PHP 7.0 支持 is_string(),必须配合使用:
foreach ($arr as $item) {
if (is_string($item)) {
$len = strlen($item);
echo "字符串 '{$item}' 字节数:{$len}\n";
} else {
echo "非字符串类型(" . gettype($item) . "),跳过\n";
}
}
⚠️ 注意:PHP 7.0 中
strlen(null)或strlen([])也会报 Warning;PHP 8+ 更严格,会直接抛TypeError。所以类型判断不是可选项,是必须步骤。
✅ 处理中文等多字节字符?用 mb_strlen()
strlen() 返回的是字节数,不是字符数。例如 "你好" 在 UTF-8 下:
-
strlen("你好")→ 6(每个汉字占 3 字节) -
mb_strlen("你好", 'UTF-8')→ 2(正确字符数)
建议统一显式指定编码:
$len = is_string($item) ? mb_strlen($item, 'UTF-8') : 0;
✅ 想批量生成长度数组?用 array_map + 匿名函数
安全写法(兼容 PHP 7.0):
$lengths = array_map(function($v) {
return is_string($v) ? mb_strlen($v, 'UTF-8') : 0;
}, $arr);
这样得到的 $lengths 是同结构数组,非字符串元素对应 0,便于后续统计或过滤。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











