开发者

php sorting a seriously multidimensional array

I'm trying to sort a multidimensional object, and, after looking on php.net and around here, I get that I should write a function that I can then call via usort. I'm having some trouble with the syntax. I haven't ever written something this complicated before, and trying to figure it out feels like a mindbender...

I'm working with the array posted at the end of this post. I want to filter out duplicate [n] values. But, and this is the tricky part for me, I want to keep the [n] value that has the smallest [d] value.

So, if I have (and this example is simplified, the real array is at the end of this post):

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 )
            )
)

I want to filter out duplicate [n] values based o开发者_Python百科n the [d] value, so that I wind up with this:

Array ( 

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

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

I've tried writing different variations of the function cmp example posted on php.net, but I haven't been able to get any to work, and I think it's because I'm not altogether clear on how to traverse it using their example...

I tried:

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

But, that really did not work at all... Anyway, here's the real array I'm trying to work with... Help is greatly appreciated!

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'
                )
          )
)


You're not really sorting as much as filtering. You'll want to for through the arrays storing n/d values and comparing then unsetting when applicable.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜