You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP技术问询:如何实现数组升降序排序与奇偶值筛选

嘿,这两个PHP数组处理的问题我刚好有现成的实现思路,给你一步步拆解:

问题1:自定义排序函数 order()

这个函数的核心是根据传入的排序方向参数,对数组进行升序或降序排序,同时保证不修改原数组(避免副作用)。

函数实现

/**
 * 自定义数组排序函数
 * @param array $array 待排序的目标数组
 * @param string $ascOrDesc 排序方向,默认'asc'升序,可选'desc'降序
 * @return array 排序后的数组
 */
function order($array, $ascOrDesc = 'asc') {
    // 复制原数组,避免直接修改传入的数组
    $sortedArr = $array;
    
    // 根据排序方向选择对应内置函数
    if ($ascOrDesc === 'asc') {
        sort($sortedArr);
    } elseif ($ascOrDesc === 'desc') {
        rsort($sortedArr);
    } else {
        // 非法参数时返回原数组,也可以根据需求抛出异常
        return $array;
    }
    
    return $sortedArr;
}

示例用法

$array = [8, 12, 7, 11, 77, 5];

// 默认升序排序
$ascResult = order($array);
print_r($ascResult); 
// 输出:Array ( [0] => 5 [1] => 7 [2] => 8 [3] => 11 [4] => 12 [5] => 77 )

// 指定降序排序
$descResult = order($array, 'desc');
print_r($descResult); 
// 输出:Array ( [0] => 77 [1] => 12 [2] => 11 [3] => 8 [4] => 7 [5] => 5 )

补充说明

如果是处理关联数组,可以把sort()换成asort()、rsort()换成arsort(),这样会保留键值对的关联关系;如果需要更复杂的自定义排序规则(比如按对象属性排序),可以改用usort()配合回调函数实现。


问题2:自定义奇偶筛选函数 oddOrEven()

这个函数需要根据传入的筛选类型,从数组中提取所有奇数或偶数,同时做了非整数元素的过滤(避免模运算出错)。

函数实现(遍历版)

适合新手理解逻辑:

/**
 * 自定义数组奇偶筛选函数
 * @param array $array 待筛选的目标数组
 * @param string $oddOrEven 筛选类型,可选'odd'(奇数)或'even'(偶数)
 * @return array 筛选后的数组
 */
function oddOrEven($array, $oddOrEven) {
    $filteredArr = [];
    
    foreach ($array as $value) {
        // 跳过非整数元素,避免无效计算
        if (!is_int($value)) {
            continue;
        }
        
        // 判断奇偶并收集符合条件的元素
        if ($oddOrEven === 'odd' && $value % 2 !== 0) {
            $filteredArr[] = $value;
        } elseif ($oddOrEven === 'even' && $value % 2 === 0) {
            $filteredArr[] = $value;
        }
    }
    
    return $filteredArr;
}

函数实现(简化版)

利用PHP内置的array_filter()函数,代码更紧凑:

function oddOrEven($array, $oddOrEven) {
    return array_filter($array, function($value) use ($oddOrEven) {
        if (!is_int($value)) return false;
        // 三元表达式简化判断逻辑
        return $oddOrEven === 'odd' ? ($value % 2 !== 0) : ($value % 2 === 0);
    });
}

示例用法

$array = [8, 12, 7, 11, 77, 5];

// 筛选偶数
$evenResult = oddOrEven($array, 'even');
print_r($evenResult); 
// 输出:Array ( [0] => 8 [1] => 12 )

// 筛选奇数
$oddResult = oddOrEven($array, 'odd');
print_r($oddResult); 
// 输出:Array ( [0] => 7 [1] => 11 [2] => 77 [3] => 5 )

内容的提问来源于stack exchange,提问作者amiega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:16:31