2016-11-24 6 views
0

Ich habe ein Eingabearray mit n Einträge für Stunden. (bis 24). Für jede Stunde gibt es ein Array mit Personen (Bob und Alice) mit einem Wert. Ich würde gerne die drittgrößte Stunde jedes Volkes bekommen. (Siehe Ausgabebeispiel).Get drittgrößter Wert in mehrdimensionalen Array PHP

Gibt es einen einfachen Weg dazu in 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 
    ), 
    ... 
); 

Ich möchte diese Ausgabe erhalten:

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

Haben Sie versucht, etwas zu schreiben? – Dekel

+0

"Gibt es einen einfachen Weg dazu in PHP?" Ja da ist. Viele Möglichkeiten. Viel Glück – Timmetje

Antwort

1

Einfache Lösung, nicht zu bob beschränkt und alice nur, behandelt den Fall von vielen Namen.

$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 Dieses Code-Snippet kann die Frage lösen [http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers] hilft wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erklärenden Kommentaren zu füllen, dies reduziert die Lesbarkeit sowohl des Codes als auch der Erklärungen! – 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

Danke für diese funktionierende Demo. Könnten Sie bitte ein Update zur Verfügung stellen, wenn man bedenkt, dass der Name von entry bob und alice dynamisch ist. Wir wissen nicht im Voraus den Namen dieser Spalte. Wir müssen den drittgrößten Wert für jeden Namen extrahieren: im Beispiel bob, alice, aber es könnte Jack, Paul, Henry sein ... – wawanopoulos

+0

@wawanopoulos Meinst du das? Http://phpio.net/s/19of –

Verwandte Themen