2010-08-18 4 views
-1

эй all.i'm новичок в этом problem.I имеют эти данные в таблице результатов:сочетание регулярных выражений и PHP до сих пор не работает

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

я хочу результат, как:

item    qty   S   A   B   C 
red    500   0   1   0   0 
blue   80   0   0   0   0 
green   300   0   0   1   0 

я попробовал этот код, но все еще не работает:

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

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

+6

Вам нужно будет объяснить, откуда взялись значения для ожидаемого результата. –

+0

Даже у меня есть +1 комментарий. – sberry

ответ

1

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

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

?> 

ВЫВОД

500 
80 
300 

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

+0

Похоже, что столбцы A/B/C представляют собой только битовые поля, представляющие содержимое таблицы базы данных «Код». Если код = A, то A = 1, B = 0, C = 0 и т. Д. Не знаю, что такое S, кроме (очевидно, из данного образца) нулевого поля –

+0

@Marc B: вы можете видеть по моему связанному вопросу. – klox

Смежные вопросы