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

