2012-03-20 2 views
0

これは... preg_matchの総数と総和/加算の最初の部分( "/"の前の数)のカウントに問題があります。私はちょうど "/"の前に数の平均を求めたい。本当に悪い英語のために申し訳ありません。PHPのカウントと合計preg_matches

script.php

$wyniki=file("wyniki.txt"); 
foreach($wyniki as $w) 
{ 
     preg_match("/^([0-9]{1})\/([0-9]{1})$/",$w,$ar); 
     if(!empty($ar)){ 
     print_r($ar[1].'/'.$ar[2]); 
     echo("\n"); 
     } 
} 

script2.php(失敗、しかしscript.phpの他の方法)

$file=fopen("wyniki.txt", "r"); 
$read=fread($file, filesize("wyniki.txt")); 
echo($read."\n"); 
//if($read!=trim('')) 
//{ 
     preg_match("/^([0-9]{1})\/([0-9]{1})$/",$read,$ar); 
     //print_r($ar[1].'/'.$ar[2]); 
     print_r($ar); 
     echo("\n"); 
//} 
fclose($file); 

5/5 
asd 

4/5 
fgh 
+1

ヒント: '[0-9]は{1}' '[0-9]'単独のように書くことができます。 '{1}'を追加するのは、 "りんごがりんごです"と言うのと似ています。文字クラスは既に1桁の数字に一致します。 –

+0

ここにあなたのPBは何ですか?あなたの正規表現はOKです(cf http://www.regexplanet.com/advanced/java/index.html) – haltabush

+0

私の問題は平均を得るためのコードを作ることです。すべての私の試みは$ arをカウントすることでも失敗しました;) – crusty

答えて

0

wyniki.txtあなたの正規表現は大丈夫そうです。おそらく、各行の最後に空白があります(あなたは '$'を使用しています)。これらを削除するには、trim()を使用します。さらに、正規表現はすべての場合に最良の解決策ではないかもしれません。おそらく、 '/'の出現をテストし、split()を使用して配列[0]が数字(is_numeric())であることを確認する方が簡単でしょう。正規表現と

$wyniki=file("wyniki.txt"); 
foreach($wyniki as $w) { 
if (strpos($w, '/') !== FALSE) { 
    $tarr = split("\/", $w); 
    if (is_numeric($tarr[0])) 
    echo "This is a number: " . $tarr[0]; 
} 
} 

第コード:次のコードを検討

$flines = array("5/5","asd","4/5","fgh"); 
$regex = "#^([0-9]{1})\/([0-9]{1})$#"; 
$res = $tot = 0; 
foreach ($flines as $fline) { 
$arr = array(); 
preg_match($regex, $fline, $arr); 
if (is_numeric($arr[1])) { 
    $res += $arr[1]; 
    $tot++; 
} 
} 
$avg = bcdiv($res, $tot, 2); 
echo "Average: $avg"; 
+0

それは正しいですが、私はまだすべての発生をカウントする方法を知らない;)また、/の前に数を合計する方法も) – crusty

+0

私は4.5を与えるコードを編集しました正しくこれは、 '/'の後ろにあるすべての数字が等しいことを前提としています。 – Jan

+0

4.5?はい、「/」の後の数字は常に5ですが、前にはありません; – crusty