2010-08-18 6 views
-1

hey all.i'm débutant à ce problem.I ont ces données dans le résultat de la table:combinaison regex et php fonctionne toujours pas

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

je veux le résultat comme:

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

i J'ai essayé ce code mais ne fonctionne toujours pas:

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

Je continue à confondre avec ce problème. s'il vous plaît aider ..

+6

Vous allez devoir expliquer d'où proviennent les valeurs pour votre sortie attendue. –

+0

Même je dois +1 le commentaire. – sberry

Répondre

1

Vous ne savez pas si cela fait ce que vous voulez ... sinon, clarifiez s'il y a des cas de bordure qui ne correspondent pas, mais basé sur vos exemples cela devrait fonctionner.

<?php 

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

?> 

SORTIE:

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

?> 

SORTIE

500 
80 
300 

Je ne sais pas comment les S, A, B, C valeurs sont censées être calculés. Peut-être pourriez-vous élaborer là-dessus.

+0

On dirait que les colonnes A/B/C ne sont que des champs de bits représentant le contenu de la table de base de données 'Code'. Si code = A, alors A = 1, B = 0, C = 0, etc ... Aucune idée de ce que le S pourrait être, autre que (évidemment de l'échantillon donné) un champ zéro –

+0

@Marc B: vous pouvez voir à ma question liée. – klox