2016-11-24 75 views
0

我有一個包含n個表示小時的條目的輸入數組。 (直到24)。對於每個小時,都有一個數組包含具有值的人(bob和alice)。我希望得到每個人輸出的第三大時刻。 (見輸出示例)。在多維數組中獲得第三大值php

在PHP中有一種簡單的方法嗎?

$input = array(
    '0' => array(
     'bob' => 8 
     'alice' => 19 
    ), 
    '1' => array(
     'bob' => 2 
     'alice' => 1 
    ), 
    '2' => array(
     'bob' => 9 
     'alice' => 0 
    ), 
    'n' => array(
     'bob' => 6 
     'alice' => 7 
    ), 
    ... 
); 

我想獲得這個輸出:

$output = array(
    'bob' => 6, 
    'alice' => 1, 
); 
+0

你試過寫點什麼嗎? – Dekel

+0

「在PHP中有沒有簡單的方法?」就在這裏。很多方法。祝你好運 – Timmetje

回答

1

簡單的解決方案,不僅限於鮑勃只有愛麗絲,處理許多名稱的大小寫。

$results = []; 

foreach($input as $array) 
    foreach($array as $name => $hours) 
     $results[$name][] = $hours; 

$results = array_map(function($v){ 
    natsort($v); 
    $v = array_values($v); 
    return $v[count($v) - 3]; 
}, $results); 
+0

雖然這段代碼可以解決這個問題,[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高你的文章的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123

3
$bobs = array_column($input, 'bob'); 
$alices = array_column($input, 'alice'); 
rsort($bobs); 
rsort($alices); 
$result = ['bob' => $bobs[2], 'alice' => $alices[2]]; 

SEE WORKING DEMO

+0

感謝您的工作演示。考慮到入門bob和愛麗絲的名字是動態的,你能否提供一個更新?我們不知道這些專欄的名字。我們必須提取每個名字的第三大價值:在例子鮑勃,愛麗絲,但它可能是傑克,保羅,亨利... – wawanopoulos

+0

@wawanopoulos你的意思是這樣的http://phpio.net/s/19of –