PHP подсчет и сумма preg_matches - PullRequest
0 голосов
/ 20 марта 2012

Итак ... У меня проблема с подсчетом всех вхождений 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");
        }
}

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);

wyniki.txt

5/5
asd

4/5
fgh

1 Ответ

0 голосов
/ 20 марта 2012

Ваше регулярное выражение выглядит нормально. Возможно, у вас есть пробелы в конце каждой строки (вы использовали '$'). Вы можете удалить их с помощью 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";
...