使用usort对数组进行排序?

时间:2011-11-14 16:44:26

标签: php arrays sorting

我在尝试对数组进行排序时遇到问题 - 我希望所有IsOpen = 1出现在顶部?

示例:

Array
(
    [0] => Array
        (
            [Isopen] => 0
        )

    [2] => Array
        (
            [Isopen] => 1
        )

    [3] => Array
        (
            [Isopen] => 0
        )

    [4] => Array
        (
            [Isopen] => 1
        )

代码:

   function cmp($a, $b) {
        if ($a['Isopen'] >= $b['Isopen']) {
            return 0;
        }
    }

    usort($data['rowResult'], "cmp");

我不明白$ a和$ b是什么意思,我看了一下PHP文档 - 信息不清楚。

6 个答案:

答案 0 :(得分:3)

$ a和$ b是要比较的元素:

function cmp($a, $b) {
    if ($a['Isopen'] == $b['Isopen']) {
        return 0;
    }
    return ($a['Isopen'] > $b['Isopen']) ? -1 : 1;
}

答案 1 :(得分:1)

cmp函数应返回0,-1(或小于零)或1(或大于零)。

    如果两个值相等,则
  • 为零。
  • 如果a的值更高,则
  • 大于零。
  • 如果b的值更高,则
  • 小于零。

用于比较这两个值你可以使用php函数strcmp

function cmp($a, $b) {
  return strcmp($a['Isopen'], $b['Isopen']);
}

答案 2 :(得分:1)

function cmp($a, $b) {
        if ($a['Isopen'] == $b['Isopen']) {
            return 0;
        }
        return ($a['Isopen'] >  $b['Isopen']) ? -1 : 1;
    }

这会使数组末尾的Isopen = 1,如果你想在乞讨时做这个

 function cmp($a, $b) {
            if ($a['Isopen'] == $b['Isopen']) {
                return 0;
            }
            return ($a['Isopen'] <  $b['Isopen']) ? -1 : 1;
        }

答案 3 :(得分:0)

在这个例子中,$ a []和$ b []是两个传递给名为'cmp'的函数的数组。它比较了两个不同数组中'Isopen'的值。

查看有关用户定义函数的文档 http://php.net/manual/en/language.functions.php

以及如何正确使用usort() http://php.net/manual/en/function.usort.php

答案 4 :(得分:0)

排序算法是Bubble Sort

基本上,它一次比较数组实体以确定它们的排序。要查看分步示例,请参阅http://en.wikipedia.org/wiki/Bubble_sort#Step-by-step_example

答案 5 :(得分:0)

您的函数 cmp 不正确(请参阅我的正确使用示例)。此外,如果你使用php 5.3+,你可以使用这样的匿名函数:

usort($data['rowResult'], function($a, $b)
{
    if ($a['Isopen'] == $b['Isopen'])
    {
        return 0;
    }

    return $a['Isopen'] < $b['Isopen'] ? -1 : 1;
});