2016-11-24 4 views
0

私は時間を表すn個のエントリを含む入力配列を持っています。 (24歳まで)。 1時間ごとに、値を持つ人(ボブとアリス)を含む配列があります。私は、各人の3番目に大きな時間を出産に出したいと思っています。 (出力例を参照)。多次元配列のPHPで3番目に大きな値を得る

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 
    ), 
    ... 
); 

Iこの出力を取得したいと思います:ボブとアリスに限定されない

$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

Whileこのコードスニペットは質問を解決するかもしれませんが、[説明を含む](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とaliceの名前が動的であることを考慮して、アップデートを提供してください。我々は、これらの列の名前を事前に知らない。私たちはそれぞれの名前の3番目に大きな値を抽出しなければなりません:例のボブ、アリスの場合はjack、paul、henry ... – wawanopoulos

+0

@wawanopoulosこのようなことを意味しますかhttp://phpio.net/s/19of –