
本文介绍使用 array_filter() 函数高效地将包含字符串和数字的混合数组拆分为两个独立数组:一个仅含数字,另一个仅含字符串。方法简洁、可读性强,且无需手动遍历。
本文介绍使用 array_filter() 函数高效地将包含字符串和数字的混合数组拆分为两个独立数组:一个仅含数字,另一个仅含字符串。方法简洁、可读性强,且无需手动遍历。
在 PHP 开发中,常会遇到需对混合类型数组(如 ['a','b','c',1,2,3,4,5,'t','x','w'])进行类型分组的场景。最推荐的方式是利用内置函数 array_filter() 配合匿名函数进行类型判断,实现一行逻辑完成分类。
以下是完整示例代码:
$arr = ['a','b','c',1,2,3,4,5,'t','x','w'];
// 提取所有数值型元素(包括整数、浮点数、数字字符串如 '123')
$numbers = array_filter($arr, function($e) {
return is_numeric($e);
});
// 提取所有非数值型元素(即纯字符串、布尔值、null 等,此处仅关注字符串)
$strings = array_filter($arr, function($e) {
return !is_numeric($e);
});
// 重置键索引,确保结果为连续数字索引(可选但推荐)
$numbers = array_values($numbers);
$strings = array_values($strings);
print_r($numbers); // 输出: [1, 2, 3, 4, 5]
print_r($strings); // 输出: ['a', 'b', 'c', 't', 'x', 'w']⚠️ 注意事项:
- is_numeric() 会将 '123'、'-5.6' 等数字字符串也识别为数值,若需严格区分整型/浮点型与字符串数字,应改用 is_int($e) || is_float($e);
- array_filter() 默认保留原数组键名,因此建议后续调用 array_values() 重置索引,避免出现稀疏或非数字键;
- 若原始数组含 null、false 等 falsy 值,is_numeric() 对其返回 false,它们将归入 $strings —— 如需排除,应在回调中额外校验。
综上,该方案兼具简洁性、可维护性与性能优势,是处理此类类型分离任务的标准实践。
立即学习“PHP免费学习笔记(深入)”;



















