2016-10-10 1 views
0

Ich arbeite an der Berechnung der Bestehensquoten von verschiedenen Fußballern. Ich habe eine TXT-Datei, von der ich die Informationen abrufe.Große assoziative Array in kleinere assoziative Arrays mit Array_filter

while($line = fgetcsv($fp, 255, ',')){ 
$rate = round(calcPR($line),2); 
$rating[$line[0]] = $rate; 
} return $rating; 

Das ist der Teil meiner Funktion war, wo ich einen $ fp bin mit meiner .txt-Datei zu lesen und hier ist, wo ich versuche, um die Daten anzuzeigen, aber bevor ich versuche, meine Daten anzuzeigen Ich versuche, die Daten in Pass-Ratings aufzuteilen, die groß, gut, mittelmäßig und schlecht sind.

Für einen großen Rating, müssen sie über 95 sein, so habe ich:

$grtRating = array_filter($rating,function(){ 
     return $rating > 95; 
}); 

Der Rest meines Codes für gut, mittelmäßig und schlecht sieht nur etwa die gleichen, aber mit unterschiedlichen Kriterien. Wie kann ich dieses $ grtRating Array nur die Scores erhalten, die über 95 liegen?

Zur Zeit, wenn ich mein Programm starte, ignoriert es im Grunde die Bediener und zeigt alle Bewertungen an, egal wie niedrig.

UPDATE: Ausgabe von $ poorRating Array: (Das ist alles < 86)

Array ([Cody Kessler] => 85.91 [Kirk Cousins] => 82.34 [Jacoby Brissett] => 81.68 [Ryan Tannehill] => 81.2 [Tyrod Taylor] => 79.29 [Ben Roethlisberger] => 77.49 [Shaun Hill] => 77.32 [Carson Palmer] => 74.79 [Jameis Winston] => 73.93 [Marcus Mariota] => 73.06 [Joe Flacco] => 71.77 [Cam Newton] => 70.32 [Josh McCown] => 70.25 [Trevone Boykin] => 69.2 [Jay Cutler] => 68.46 [Blake Bortles] => 67.13 [Brock Osweiler] => 66.1 [Blaine Gabbert] => 63.35 [Case Keenum] => 60.63 [Ryan Fitzpatrick] => 48.93 [Robert Griffin III] => 48.54 [Drew Stanton] => 34.36 [Kellen Clemens] => 2.07) 

Ich denke, das Problem dann, wie ich Ausgabe meines Code sein könnte. Ich habe meine Links in einer ungeordneten Liste. Hier

ein Beispiel:

<a href='pr.php?action=all'>All Ratings</a> 

Ich habe eine pr.php?action=great', pr.php action = gut‘, pr.php?action=mediocre', and pr.php action =? 'Schlecht'?.

Hier ist, wie ich alles ausgeben, ist das Problem, wie ich das mache?

$mode = 'all'; 

if ($_GET['action'] == 'great') $mode = 'great'; 
if ($_GET['action'] == 'good') $mode = 'good'; 
if ($_GET['action'] == 'mediocre') $mode = 'mediocre'; 
if ($_GET['action'] == 'poor') $mode = 'poor'; 

    if($mode == 'great'){ 
        foreach($greatRating as $name=>$pr){ 
          echo "<tr><td>{$name}</td><td>{$pr}</td></tr>\n"; 
        } 
      } 
      if($mode == 'good'){ 
        foreach($goodRating as $name=>$pr){ 
        echo "<tr><td>{$name}</td><td>{$pr}</td></tr>\n"; 
        } 
      } 
      if($mode == 'mediocre'){ 
        foreach($mediocreRating as $name=>$pr){ 
        echo "<tr><td>{$name}</td><td>{$pr}</td></tr>\n"; 
        } 
      } 
      if($mode == 'poor'){ 
        foreach($poorRating as $name=>$pr){ 
        echo "<tr><td>{$name}</td><td>{$pr}</td></tr>\n"; 
        } 
      } 
      if($mode = 'all'){ 
        foreach($rating as $name=>$pr){ 
        echo "<tr><td>{$name}</td><td>{$pr}</td></tr>\n"; 
        } 
      } 


    echo "</table></div>\n"; 
} 

Würden Sie mir bitte helfen, herauszufinden, wo mein Fehler ist?

+0

Ihr '$ greatRating' sollte' $ grtRating' sein –

+0

Ich habe es jetzt auf '$ grtRating' umgestellt und es funktioniert immer noch nicht. EDIT: Nur Spaß, das war alles, ich fühle mich wie ein Idiot. Ich werde deine Antwort als richtig markieren! – CSGuy94

Antwort

1

ersetzen

$grtRating = array_filter($rating,function(){ 
    return $rating > 95; 
}); 

mit

$grtRating = array_filter($rating, function($val) { 
    return $val > 95; 
}); 

In dem ersten, nicht wahr den Rückruf Argument enthalten, die den Wert von jeder Iteration des Array übergeben enthält, die denjenigen verwendet wird in deiner Bewertung.

+0

Dies gibt immer noch jeden Wert für mich aus. Gibt es etwas, das ich vielleicht in meinen Datenausgabeschleifen falsch gemacht habe? Macht das einen Unterschied, dass ich den Namen mit der Bewertung assoziierte. Also ist es zufällig die Namen gegen die Zahlen? – CSGuy94

+0

Können Sie 'print_r ($ rating)' versuchen und mir die Ausgabe zeigen? –

+0

Die Ausgabe ist: 'Array ([EJ Manuel] => 127.07 [Jimmy Garoppolo] => 119.02 [Matt Ryan] => 117.36)' Es gibt viel mehr Werte, aber ich habe nur ein paar aufgeführt. – CSGuy94