这是一个非常神秘的问题,但我真的很好奇。多年来,我今天第一次使用usort,我对到底发生了什么特别感兴趣。假设我有以下数组:

$myArray = array(1, 9, 18, 12, 56);

我可以用usort排序:
usort($myArray, function($a, $b){
  if ($a == $b) return 0;
  return ($a < $b) ? -1 : 1;
});

我不太了解两个参数$ a和$ b到底发生了什么。它们是什么,它们代表什么。我的意思是,我可以假设$ a表示数组中的当前项目,但是与之相比,这到底是什么呢?什么是$ b?

我可以增加数组以包含字符串:
$myArray = array(
  array("Apples", 10),
  array("Oranges", 12),
  array("Strawberries", 3)
);

并运行以下命令:
usort($myArray, function($a, $b){
  return strcmp($a[0], $b[0]);
});

这样就可以根据[0]索引值按字母顺序对我的子数组进行排序。但这并不能清楚说明$ a和$ b是什么。我只知道与我要寻找的样式相符。

有人可以澄清一下实际发生的情况吗?

最佳答案

要对任何内容进行排序,您需要一种方法来比较两个项目,并弄清一项是否先于另一项。这就是您提供给usort的东西。此函数将从您的输入数组中传递两个项目,并返回它们应位于的顺序。

一旦可以比较两个元素,就可以使用您选择的排序算法。

如果您不熟悉,您可能想看看像bubblesort这样的简单天真的算法如何使用比较函数。

在后台,PHP使用了quicksort

关于PHP的USORT回调函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1091740/

10-09 21:57