2016-10-10 1 views
0

私は様々なフットボール選手の合格率の計算に取り組んでいます。私は情報を引き出している.txtファイルを持っています。Array_filterを使用したより小さい連想配列への大きな連想配列

私は.txtファイルからの読み取りに$ fpのを使用しています私の機能の一部だったとここで私はデータを表示しようとしているところですが、私は私のデータを表示する前に
while($line = fgetcsv($fp, 255, ',')){ 
$rate = round(calcPR($line),2); 
$rating[$line[0]] = $rate; 
} return $rating; 

私は偉大な、良い、平凡な、そして貧しい人々の合格評価にデータを分割しようとします。偉大な評価のために、彼らは95を超えること

を必要とするので、私は持っている:

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

ちょうど同じ程度、良い平凡な、と貧しいルックスのための私のコードの残りの部分が、異なる基準を持ちます。この$ grtRating配列を95以上のスコアだけを格納するにはどうすればよいですか?

私のプログラムを実行すると、基本的には演算子は無視され、どれほど低い値であってもすべての評価が表示されます。

UPDATE:$ poorRating配列の 出力:(これはすべて< 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) 

私は問題は、その後どのようにI出力私のコードであるかもしれないと思います。私は順序のないリストに自分のリンクを持っています。 '私はpr.php?action=great', pr.phpアクション=良い」、pr.php?action=mediocre', and pr.phpアクション=?' 貧困層を持っている

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

:?ここ

は一例です。

ここで私はすべてのものを出力しますが、どうやってそれを行うのですか?

$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"; 
} 

私のエラーがどこにあるのか理解してもらえますか?

+0

あなたの '$ greatRating'は' $ grtRating'でなければなりません –

+0

これを '$ grtRating'に切り替えましたが、それでも動作しません。編集:ちょうど冗談、それは完全にそれだった、私は馬鹿のように感じる。私はあなたの答えを正しいものとしてマークします! – CSGuy94

答えて

1

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

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

を交換し、あなたが使用したものになり、アレイの各反復から渡された値が含まれているコールバック引数を、含まれていませんでしたあなたの評価で

+0

これはまだ私のためのすべての値を出力します。私のデータ出力ループに間違ったことがありますか?これは私が格付けに名前を関連づけた点で違いますか?それで、偶然に数字に照らして名前をチェックしていますか? – CSGuy94

+0

'print_r($ rating)'を試して、出力を表示できますか? –

+0

出力は次の通りです: 'Array([EJ Manuel] => 127.07 [Jimmy Garoppolo] => 119.02 [Matt Ryan] => 117.36)'もっと値があります。 – CSGuy94