2010-04-26 97 views
0

我想对多维对象进行排序,并且在查看php.net和这里后,我得到了我应该编写的函数,然后可以通过usort调用。我在语法上遇到了一些麻烦。我从来没有写过这么复杂的事情,并试图找出它感觉像一个mindbender ...php对一个严重的多维数组进行排序

我正在使用在这篇文章末尾张贴的数组。我想过滤掉重复的[n]值。但是,这对我来说是棘手的部分,我想保留[d]值最小的[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

你不是真正的过滤排序。你会想要通过存储n/d值的数组,然后在适用时比较然后取消设置。

+0

嗯,我试过这个,但它没有工作,所以也许我不理解,或者我的语法错误? $ m = 1; $ v = 0; 的foreach($纳秒为$密钥=> $值) \t { \t的foreach($值K2 $) \t { \t如果($值[$米] [ 'N'] == \t $值$ v ['n'] && $ value [$ m] ['d']> $ value [$ v] ['d']) \t { \t \t unset($ ns [$ key] [$ m ]); \t} \t $ m ++; $ V ++; \t \t} } – BigDogsBarking 2010-04-26 15:09:18

+0

用于,而不是foreach。 – webbiedave 2010-04-26 16:18:30