如何将包含sort()的PHP中位数函数整合为单行实现?
单行实现PHP中位数函数的技巧
没问题!要把这个中位数函数(包括sort()调用)塞进一行,核心技巧就是利用PHP的逗号运算符——它能让你在一个表达式里依次执行多个操作,最后返回最后一个操作的结果。
按你的原逻辑实现的单行版本
function Mediana($e = array()) { return (count($e) != 0) ? (sort($e), (count($e) % 2 == 0) ? (($e[(count($e)/2)] + $e[(count($e)/2)+1])/2) : $e[(count($e)/2)+1]) : 0; }
关键原理说明
- 逗号运算符会先执行左边的
sort($e)(因为sort()是引用传递,直接修改传入的数组$e),然后执行后面的三元判断逻辑,整个表达式最终返回三元运算的结果。 - 这样就完全避免了把
sort()单独拆成一行,真正实现了“一行内整合所有逻辑”的要求。
额外修正:索引偏移问题(可选)
顺便提一句,你原函数里的索引计算存在小问题——PHP数组是0起始索引的。比如当数组长度为偶数(比如4)时,正确的中位数应该取索引1和2的元素,但原代码取的是2和3,会导致结果偏移。如果需要修正这个问题,我们可以在单行里用intdiv取整,还能引入临时变量让逻辑更清晰:
function Mediana($e = array()) { return (count($e) != 0) ? (sort($e), $mid = intdiv(count($e), 2), count($e) % 2 == 0 ? ($e[$mid-1] + $e[$mid])/2 : $e[$mid]) : 0; }
这里同样用逗号运算符依次执行排序、定义$mid变量、计算中位数三个操作,既保持单行,又修正了逻辑问题。
内容的提问来源于stack exchange,提问作者JDev
相关产品推荐
相关产品推荐

