Сочетание регулярных выражений и PHP все еще не работает - PullRequest
0 голосов
/ 18 августа 2010

Привет всем. Я новичок в этой проблеме. У меня есть эти данные в результате таблицы:

item              range_code                   class
red               123x0001-123x0500             A
blue              123x0021-123x0100             //if null read zero
green             123x0001-123x0300             b

Я хочу, чтобы результат был:код, но все еще не работает:

$sql= 'SELECT item, range_code as qty, class FROM result GROUP BY item, qty';
$result=mysql_query($sql);
while ($row=mysql_fetch_assoc($result)){
         preg_match_all('/\d+(?=-|$)/g',$row['qty'],$matches);
         echo intval($matches[0][1])-intval($matches[0][0])+1;
         }

Я все еще путаю эту проблему.пожалуйста, помогите ..

1 Ответ

1 голос
/ 18 августа 2010

Не уверен, что это делает то, что вы хотите ... если нет, уточните, есть ли крайние случаи, которые не совпадают, но на основе ваших примеров это должно работать.

<?php

$code = "123x0001-123x0500";
preg_match("/^\d+x(\d+)-\d+x(\d+)$/", $code, $matches);
echo intval($matches[2]) - intval($matches[1]) + 1;

?>

ВЫХОД:

500

.

<?php

$codes = array("123x0001-123x0500",  "123x0021-123x0100", "123x0001-123x0300");

function getDiff($range) {
    preg_match("/^\d+x(\d+)-\d+x(\d+)$/", $range, $matches);
    return intval($matches[2]) - intval($matches[1]) + 1;
}

foreach ($codes as $code) {
    echo getDiff($code) . "\n";
}

?>

OUTPUT

500
80
300

Не уверен, как предполагается рассчитывать значения S, A, B, C. Возможно, вы можете уточнить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...