使用 array_filter() 配合 is_numeric() 回调函数即可过滤掉数组中的非数字元素。调用时传入原数组和匿名函数,返回的仅包含数字值(含字符串形式的数字),其余类型如布尔值、空值或文本均被移除。

array_filter() 处理混合类型数组的具体行为
当输入数组包含整数、浮点数、数字字符串以及非数字内容时,is_numeric() 会保留所有能被解析为数值的项。例如,"123" 会被保留,而 false 或 null 则被剔除。该操作不改变键名,若需重置索引可使用 array_values() 包裹结果。

$input = [1, "2", 3.5, "abc", null, true, "456"];
$result = array_filter($input, function($item) {
return is_numeric($item);
});
// 结果: [0 => 1, 1 => "2", 2 => 3.5, 6 => "456"]
如何确保过滤后的数组索引连续且类型为纯数值
默认情况下 array_filter() 保留原始键名,导致索引出现断层。若需要连续索引及统一数值类型,可在过滤后链式调用 array_map() 将元素强制转为 float 或 int,并使用 array_values() 重新索引。这样可避免后续计算中因类型不一致引发的警告。
立即学习“PHP免费学习笔记(深入)”;

$cleaned = array_values(array_map('floatval', $result));
// 结果: [1.0, 2.0, 3.5, 456.0]
空字符串在 is_numeric() 判断下的具体表现
空字符串 "" 在 is_numeric() 检查中返回 false,因此会被 array_filter() 移除。这与 empty() 的行为不同,empty("") 为真但 is_numeric("") 为假。若业务逻辑需保留空字符串作为有效占位符,需调整回调条件,否则它将被视为非数字项剔除。



















