2009-07-30 7 views
0

Je travaille sur l'accès à une table db qui va lire une entrée de texte pour trouver une chaîne ... puis, en fonction de cette chaîne, créer une nouvelle variable.Travailler sur la logique du commutateur-cas php

est ici la source:

<?php 

    $haystack = "Additional Licenses: +2 Licenses /br/ Back-up CD-ROM: No"; 
    $needle = "+0"; 

    switch ($needle) { 
     case '+1': 
      if (strstr($haystack, $needle)) { 
       $actpurch = "3"; 
      } else { 
       break; 
      } 
     case '+2': 
      if (strstr($haystack, $needle)) { 
       $actpurch = "4"; 
      } else { 
       break; 
      } 
     case '+3': 
      if (strstr($haystack, $needle)) { 
       $actpurch = "5"; 
      } else { 
       break; 
      } 
     default: 
      $actpurch = "2"; 
      break; 
    } 

    echo "Activations Purchased: " . $actpurch; 

?> 
+2

Avez-vous une question? –

Répondre

0

Depuis $needle = "+0" vous toujours finir dans

default: 
    $actpurch = "2"; 
    break; 

Vous pouvez lire à nouveau le manual's page about the switch statement.

+0

Comment puis-je l'obtenir pour reprotre le CORRECT. Puisque $ haystack va réellement tirer une entrée d'une table db (et cela changera) en fonction du nombre d'activations achetées par le client. Donc, la question est: Comment puis-je obtenir l'interrupteur de travailler avec une entrée changeante? Le texte complet restera le même sauf le "+ #". La plupart seront '+0', mais si ce n'est pas le cas, je dois m'assurer que chaque client est limité au nombre d'activations approprié. –

0

Vous êtes switch sur $needle, qui a une valeur fixe de "+0". Ainsi, seul votre defaultcase sera exécuté.

0

Je n'utiliserais pas un commutateur complètement. Ce que vous essayez de faire est d'extraire le nombre, ce que vous pouvez faire avec une expression régulière, voir le PHP Manual. Un exemple:

$haystack = "Additional Licenses: +2 Licenses /br/ Back-up CD-ROM: No"; 
$licences = 2; 

$extra = 0; 
if (preg_match('/Additional Licenses: \+(\d+) Licenses/', $haystack, $matches)) { 
     $extra = intval($matches[1]); 
} else { 
     die('Error: couldn\'t find number of licences'); 
} 

$actpurch = $licences + $extra; 
echo $actpurch; 

L'expression régulière correspond à la chaîne par rapport au modèle (\ d + correspond à un ou plusieurs chiffres).