2014-10-02 29 views
2

我有以下阵列:如何提取子数组的最大值并保留父数组的键?

Array 
(
[0] => Array 
    (
     [0] => 2000 
     [1] => 401 
    ) 

[1] => Array 
    (
     [0] => 2000 
     [1] => 317 
    ) 

[2] => Array 
    (
     [0] => 2000 
     [1] => 301 
    ) 

[3] => Array 
    (
     [0] => 2002 
     [1] => 285 
    ) 

[4] => Array 
    (
     [0] => 2002 
     [1] => 277 
    ) 

[5] => Array 
    (
     [0] => 2002 
     [1] => 271 
    ) 

[6] => Array 
    (
     [0] => 2001 
     [1] => 208 
    ) 

[7] => Array 
    (
     [0] => 2001 
     [1] => 263 
    ) 

[8] => Array 
    (
     [0] => 2001 
     [1] => 262 
    ) 

[9] => Array 
    (
     [0] => 2000 
     [1] => 258 
    ) 
) 

然后我写了下面的代码组其值:

$result06 = array(); 

foreach ($chart06 as $el) { 

    if (!array_key_exists($el[0], $result06)) { 

     $result06[$el[0]] = array(); 

    } 

    $result06[$el[0]][] = $el[1]; 

} 

随着我们收到以下结果:

Array 
(
[2000] => Array 
    (
     [0] => 401 
     [1] => 317 
     [2] => 301 
     [3] => 258 
    ) 

[2002] => Array 
    (
     [0] => 285 
     [1] => 277 
     [2] => 271 
    ) 

[2001] => Array 
    (
     [0] => 208 
     [1] => 263 
     [2] => 262 
    ) 
) 

现在,我怎么解压每个子数组的最大值并将其转换为“平坦”数组,如下所示?

Array 
(
[2000] => 401 
[2002] => 285 
[2001] => 263 
) 

我尝试这样做:

foreach ($result06 as $value){ 
    $resultMax[] = max($value); 
} 

但该结果是:

Array 
(
[0] => 401 
[1] => 285 
[2] => 263 
) 

但我真的需要原始密钥是相同的。

我将不胜感激任何帮助!

回答

0

你可以在foreach环这样的关键:

foreach ($result06 as $key => $value){ 
    $resultMax[$key] = max($value); 
} 
0

跳过创建分组阵列的中间步骤:

$result06 = array(); 

foreach ($chart06 as $el) { 
    if (!isset($result06[$el[0]])) { 
     $result06[$el[0]] = 0; 
    } 
    $result06[$el[0]] += el[1]; 
} 
0

只能将最大摆在首位:

foreach ($chart06 as $el) { 
    if (!array_key_exists($el[0], $result06)) { 
     $result06[$el[0]] = $el1; 
    } else { 
     $result06[$el[0]] = max($result06[$el[0]], $el[1]); 
    } 
}