2012-04-27 7 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 

다음 어레이 가정 :

: I 위의 배열을 정렬하고, 다음과 같은 방식으로 보여해야

$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) 
    ); 

는 I는 다음의 방식으로 매트릭스를

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

본질적으로 위의 가중치의 최대 합계를 구해야하고 한 달에 ne foo와 foo는 한 달 밖에 가질 수 없습니다. 상기 예에서, 결과는 다음 52

덕분 PHP 함수 max() 여기 열쇠

답변

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

:

$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; 

     } 

}