php 7.4 中用 array_filter() 配合 is_int() 和取模判断高效分组奇偶整数,跳过非整数;可选 array_reduce 一次性生成 ['even'=>[], 'odd'=>[]] 结构,负数与 0 奇偶性符合数学定义。

PHP 7.4 中按奇偶元素对数组分组,核心是用 array_filter() 配合回调函数判断整数奇偶性,再分别提取两组。无需手动遍历,简洁高效。
明确分组逻辑:区分整数与非整数
奇偶性只对整数有意义。若原数组含字符串、浮点数或 null,需先决定如何处理:
- 跳过非整数(推荐):用 is_int() 或 filter_var($v, FILTER_VALIDATE_INT) !== false 过滤
- 强制转整:如 (int)$v,但可能引发意外(如 "12abc" → 12,"abc" → 0)
- 保留原始类型但仅对整数判奇偶:其他值可归入“无效组”或丢弃
标准实现:用 array_filter 分离奇数和偶数
这是最符合 PHP 7.4 特性的写法,利用匿名函数和严格比较:
$arr = [1, 4, 5, 8, 9, 12, 15, 'hello', 3.14, -2, 0];
$evens = array_filter($arr, function($v) {
return is_int($v) && $v % 2 === 0;
});
$odds = array_filter($arr, function($v) {
return is_int($v) && $v % 2 !== 0;
});
// 注意:array_filter 保留原键名,如需重索引,加 array_values()
$evens = array_values($evens);
$odds = array_values($odds);
进阶技巧:一行合并 + 键值重组(PHP 7.4 兼容)
若需返回关联数组 ['even' => [...], 'odd' => [...]],可用 array_reduce 一次性完成:
$result = array_reduce($arr, function($carry, $item) {
if (!is_int($item)) return $carry;
$group = $item % 2 === 0 ? 'even' : 'odd';
$carry[$group][] = $item;
return $carry;
}, ['even' => [], 'odd' => []]);
这样避免两次遍历,也更利于后续扩展(比如加“zero”组或负数单独处理)。
注意边界情况
PHP 中负数取模结果仍遵循数学奇偶定义(如 -3 % 2 === -1,所以 -3 是奇数;-4 % 2 === 0,所以 -4 是偶数)。0 是偶数,这点无需额外判断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











