2010-04-26 99 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