php排序一个严重的多维数组

时间:2010-04-26 06:36:45

标签: php arrays sorting multidimensional-array

我正在尝试对一个多维对象进行排序,并且在查看php.net之后,我知道我应该编写一个函数,然后我可以通过usort调用它。我在语法方面遇到了一些麻烦。我以前从来没有写过这么复杂的东西,试图把它弄清楚就像一个思想家......

我正在使用本帖末尾发布的数组。我想过滤掉重复的[n]值。但是,这对我来说是棘手的部分,我想保持[n]值最小的[n]值。

所以,如果我有(并且这个例子是简化的,那么真正的数组就在这篇文章的末尾):

Array ( 

[7777] => Array 
            ( [0] => Array
                ( [n] => '12345' [d] => 1 ) 
              [1] => Array
                ( [n] => '67890' [d] => 4 )
            )

[8888] => Array
            ( [2] => Array
                ( [n] => '12345' [d] => 10 )
              [3] => Array
                ( [n] => '67890' [d] => 2 )
            )
)

我想根据[d]值过滤掉重复的[n]值,这样我就可以了:

Array ( 

[7777] => Array 
            ( [0] => Array
                ( [n] => '12345' [d] => 1 ) 
            )

[8888] => Array
              [3] => Array
                ( [n] => '67890' [d] => 2 )
            )
)

我已经尝试在php.net上发布函数cmp示例的不同变体,但是我还没有能够工作,我认为这是因为我并不完全清楚如何遍历它用他们的例子......

我试过了:

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

但是,这根本不起作用......无论如何,这是我正在尝试使用的真正阵列......非常感谢帮助!

Array
(
    [32112] => Array
        (
            [0] => Array
                (
                    [n] => '02124'
                    [d] => '0'
                )

            [1] => Array
                (
                    [n] => '02124'
                    [d] => '0.240101905123744'
                )

            [2] => Array
                (
                    [n] => '11050'
                    [d] => '0.441758632682761'
                )

            [3] => Array
                (
                    [n] => '02186'
                    [d] => '0.317514080260304'
                )
        )
    [43434] => Array
        (
            [4] => Array
                (
                    [n] => '02124'
                    [d] => '5.89936971664429e-05'
                )

            [5] => Array
                (
                    [n] => '02124'
                    [d] => '0.145859264792549'
                )

            [6] => Array
                (
                    [n] => '11050'
                    [d] => '0.327864593457739'
                )

            [7] => Array
                (
                    [n] => '11050'
                    [d] => '0.312135345168295'
                )
          )
)

1 个答案:

答案 0 :(得分:1)

你的排序并不像过滤那么多。您需要通过存储n / d值的数组并在适用时比较然后取消设置。