PHP排序稳定性问题,如何深入探究其本质与优化策略?

2026-04-06 17:181阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1202个文字,预计阅读时间需要5分钟。

PHP排序稳定性问题,如何深入探究其本质与优化策略?

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排序稳定性问题。

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问题。

在排序前后相等的元素相对位置不变即说这个算法是稳定的。

阅读全文