2013-02-08 23 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; 
    } 
});