2012-04-27 111 views
0

刚才我刚才问过这个问题,但我错误地问了,所以我很抱歉。PHP排序多维数组按重量排序

我希望有一个简单的方法来做到这一点没有吨和吨的循环。

我有以下列方式的矩阵:

 Foo1 Foo2 Foo3 .... FooN 
Jan 1  8  5   4 
Feb 10  12  15   11 
Mar 12  7  4   3 
Apr 10  16  7   17 

假设以下的数组:

$arrayMonths = array(
     'jan' => array(1, 8, 5,4) 
     'feb' => array(10,12,15,11) 
     'mar' => array(12, 7, 4, 3) 
     'apr' => array(10,16,7,17) 
    ); 

我需要上述数组进行排序,并显示在下面的方式:

array[apr][FooN] = 17 
array[feb][Foo3] = 15 
array[mar][Foo1] = 12 
array[jan][Foo2] = 8 

本质上,我需要得到上述权重的最大总和,一个月只能有o ne foo和one foo只能有一个月。在上面的例子中,结果将是52

由于

回答

0

见演示:http://codepad.org/vDI2k4n6

$arrayMonths = array(
     'jan' => array(1, 8, 5,4), 
     'feb' => array(10,12,15,11), 
     'mar' => array(12, 7, 4, 3), 
     'apr' => array(10,16,7,17), 
    ); 

$position = array("Foo1","Foo2","Foo3","FooN"); 
$set = array(); 

foreach($arrayMonths as $key => $value) 
{ 
    $max = max($value); 
    $pos = array_search($max, $value); 
    $set[$key][$position[$pos]] = $max ; 
} 


function cmp($a, $b) 
{ 
    foreach($a as $key => $value) 
    { 
     foreach ($b as $bKey => $bValue) 
     { 
      return $bValue - $value ; 
     } 
    } 

} 

uasort($set,"cmp"); 
var_dump($set); 

输出

array 
     'apr' => 
     array 
      'FooN' => int 17 
     'feb' => 
     array 
      'Foo3' => int 15 
     'mar' => 
     array 
      'Foo1' => int 12 
     'jan' => 
     array 
      'Foo2' => int 8 
0

PHP函数max()是这里的关键:

$sum = 0; 
foreach ($array as $row) { 
    $sum += max($row); 
} 
echo $sum; 
0
$totalArr = array(); 
$total = 0; 

foreach($arrayMonths as $month => $row) 
{ 
    $high = max($row); 
    $totalArr[$month]['foo'] = $high; 
    $total += $high; 
} 

echo "Total is: " . $total . "\n\n"; 
print_r($totalArr); 

输出:

Total is: 52 

Array 
(
    [jan] => Array 
     (
      [foo] => 8 
     ) 

    [feb] => Array 
     (
      [foo] => 15 
     ) 

    [mar] => Array 
     (
      [foo] => 12 
     ) 

    [apr] => Array 
     (
      [foo] => 17 
     ) 

) 

如果您愿意,请使用uasort()对新数组进行排序。 http://php.net/manual/en/function.uasort.php

0
$arr_new = array(); 
foreach(array_keys($arrayMonths) as $h) { 

    $int_max = max($arrayMonths[$h]); 
    foreach(array_keys($arrMonths[$h]) as $h2) 
     if ($arrMonths[$h][$h2] == $int_max) { 

      $arr_new[$h]["foo{$h2}"] = $int_max; 
      break; 

     } 

}