2013-02-08 25 views
0

我有一個內部有多個數組的數組。我正在嘗試安排從最大到最小new_sales的數量。下面是這正好爲約40陣列的陣列的例子:如何按特定字段排列多個陣列

Array 
(
    [0] => Array 
     (
      [Tech] => Array 
       (
        [first_name] => Anthony 
        [last_name] => Bisignano 
       ) 

      [0] => Array 
       (
        [new_sales] => 21 
        [upgrades] => 2 
       ) 

     ) 

    [1] => Array 
     (
      [Tech] => Array 
       (
        [first_name] => Arnold 
        [last_name] => Ybanez 
       ) 

      [0] => Array 
       (
        [new_sales] => 5 
        [upgrades] => 0 
       ) 

     ) 

我想使用的功能如下:用我這個功能

function aasort (&$techs, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($techs); 
    foreach ($techs as $ii => $va) { 
     $sorter[$ii]=$va[$key]; 
    } 
    asort($sorter); 
    foreach ($sorter as $ii => $va) { 
     $ret[$ii]=$techs[$ii]; 
    } 
    $techs=$ret; 
    } 

    aasort($test,"new_sales"); 

是錯的或者是有其他我應該採取的方法?

回答

0

PHP中有支持用戶定義比較方法的排序功能。這樣的代碼應該可以幫助你開始使用它。

function cmp($a, $b) 
{ 
    if ($a[0]['new_sales'] == $b[0]['new_sales']) { 
     return 0; 
    } 
    return ($a[0]['new_sales'] < $b[0]['new_sales']); 
} 
usort($data, "cmp"); 
+0

謝謝你這個答案非常完美。 – user1916690 2013-02-08 16:54:59

0

在這種情況下,你可能想使用usort(),這樣你可以定義排序邏輯。

因此,像這樣:

usort($array, function($a, $b) { 
    if ($a[0]['new_sales'] > $b[0]['new_sales']) { 
     return -1; // note we use -1 here because we want a reverse sort 
    } else if ($a[0]['new_sales'] < $b[0]['new_sales']) { 
     return 1; 
    } else { 
     return 0; 
    } 
});