所以..。我有一个问题,计数所有的preg_match和求和/加法的第一部分(数字前面的"/")。我只想得到"/“之前的数字的平均值。真的很抱歉我的英语不好。
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");
}
}way (失败,但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);wyniki.txt
5/5
asd
4/5
fgh发布于 2012-03-21 02:23:31
您的正则表达式看起来没问题。也许你在每一行的末尾都有一些空格(你已经使用了'$')。您可以使用trim()删除它们。此外,正则表达式可能不是所有情况下的最佳解决方案。也许更简单的方法是测试'/‘是否出现,然后使用split()检查数组是否为数字(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";https://stackoverflow.com/questions/9792241
复制相似问题