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
相关产品推荐
相关产品推荐

