利用array_filter生成有效ID数组时重复调用trim的优化问题
优化方案:避免重复调用
trim() 好问题!确实没必要对同一个有效ID调用两次trim(),我们可以通过调整处理逻辑来优化,这里有两种简洁的方案:
方案1:用array_reduce一次完成所有操作
这种方法只需要遍历数组一次,同时完成trim、有效性校验和结果收集,效率更高:
$definedIds = "123,1234,1243, 12434 , asdf"; // 来自用户面板 $validIds = array_reduce(explode(",", $definedIds), function ($carry, $item) { $trimmedId = trim($item); try { new Id($trimmedId); $carry[] = $trimmedId; } catch (\Exception $e) { // 无效ID,直接跳过 } return $carry; }, []);
方案2:先统一trim再过滤
如果更看重代码可读性,也可以先把所有分割后的元素统一trim,再进行有效性过滤,这样逻辑更直观:
$definedIds = "123,1234,1243, 12434 , asdf"; // 来自用户面板 $trimmedItems = array_map('trim', explode(",", $definedIds)); $validIds = array_filter($trimmedItems, function ($id) { try { new Id($id); return true; } catch (\Exception $e) { return false; } }); // 可选:如果需要重置数组索引(去掉过滤后留下的空键) $validIds = array_values($validIds);
两种方案都只对每个元素调用一次trim(),完全避免了重复操作。相比原代码,不仅减少了冗余调用,方案1还减少了一次数组遍历,性能更优;方案2的逻辑更直白,更容易维护,你可以根据自己的需求选择。
内容的提问来源于stack exchange,提问作者CarlosAS
相关产品推荐
相关产品推荐

