PHP排序稳定性问题,如何深入探究其本质与优化策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1202个文字,预计阅读时间需要5分钟。
PHP排序稳定性问题+最近在工作中遇到一个有趣的问题,线上输入是一串排序好的关联数组,经过一系列处理后输出的数组却是乱序,且本地运行无法复现。查看相关代码后,最让人头疼的是PHP排序稳定性问题。
PHP排序稳定性问题最近在工作中碰到一个挺有意思的问题,线上输入是一串排好序的关联数组,经过一系列处理后输出的数组却是乱序,且本地运行无法复现。查看相关代码后,最让人在意的是这一段:
$categories = Arr::sort($categories, function ($node) { return $node['default']; }, true);
作用是按default优先级将元素提到前面,首先确认了下线上的illuminate/support版本和本地一致,查看Arr::sort()源码:
... $descending ? arsort($results, $options) : asort($results, $options);
最终还是调用 php 的asort,线上是 php5 而本地和测试因为最近考虑升级都换成了 php7,最后在 php5 环境下成功复现,确定出是sort问题。
在排序前后相等的元素相对位置不变即说这个算法是稳定的。
本文共计1202个文字,预计阅读时间需要5分钟。
PHP排序稳定性问题+最近在工作中遇到一个有趣的问题,线上输入是一串排序好的关联数组,经过一系列处理后输出的数组却是乱序,且本地运行无法复现。查看相关代码后,最让人头疼的是PHP排序稳定性问题。
PHP排序稳定性问题最近在工作中碰到一个挺有意思的问题,线上输入是一串排好序的关联数组,经过一系列处理后输出的数组却是乱序,且本地运行无法复现。查看相关代码后,最让人在意的是这一段:
$categories = Arr::sort($categories, function ($node) { return $node['default']; }, true);
作用是按default优先级将元素提到前面,首先确认了下线上的illuminate/support版本和本地一致,查看Arr::sort()源码:
... $descending ? arsort($results, $options) : asort($results, $options);
最终还是调用 php 的asort,线上是 php5 而本地和测试因为最近考虑升级都换成了 php7,最后在 php5 环境下成功复现,确定出是sort问题。
在排序前后相等的元素相对位置不变即说这个算法是稳定的。

