我正在尝试对一个多维对象进行排序,并且在查看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'
)
)
)
答案 0 :(得分:1)
你的排序并不像过滤那么多。您需要通过存储n / d值的数组并在适用时比较然后取消设置。