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

PHP最佳实践:修改函数实现单次调用处理多优先级类型

问题描述

现有如下PHP函数:

function sortRelevantId($idArray, $maxIds, $xml, $idTpe)
{
    for ($i = count($idArray); $i < $maxIds; $i++) {
        if ($xml->sub[$i]->type == $idTpe) {
            $idArray[] = $i;
        }
    }
    return $idArray;
}

当前调用方式为:

$idArray = [];
$idArray= sortRelevantId($idArray , $maxIds, $xml, "a");
$idArray= sortRelevantId($idArray , $maxIds, $xml, "b");

希望修改该函数,仅需调用一次即可先处理类型"a"、再处理类型"b"("a"优先级高于"b"),询问实现方法。

解决方案

把函数的$idTpe参数改为数组类型,遍历这个类型数组按顺序执行筛选逻辑,就能一次调用完成先"a"后"b"的处理需求。

修改后的函数代码:

function sortRelevantId($idArray, $maxIds, $xml, $idTypes)
{
    // 兼容单个类型的调用场景(可选)
    if (!is_array($idTypes)) {
        $idTypes = [$idTypes];
    }
    
    foreach ($idTypes as $type) {
        // 对每个类型执行原有的筛选逻辑
        for ($i = count($idArray); $i < $maxIds; $i++) {
            if ($xml->sub[$i]->type == $type) {
                $idArray[] = $i;
            }
        }
    }
    return $idArray;
}

新的调用方式:

$idArray = [];
$idArray = sortRelevantId($idArray, $maxIds, $xml, ["a", "b"]);

逻辑说明

  • 按数组内的类型顺序依次处理,天然保证"a"的优先级高于"b"
  • 每次处理新类型时,从当前$idArray的长度开始遍历,避免重复处理已遍历过的$xml->sub元素
  • 保留了对单个类型调用的兼容性,若不需要该特性可删除is_array判断部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:18