2009-07-30 2 views
0

문자열을 찾기 위해 텍스트 엔트리를 읽는 db 테이블에 액세스하려고합니다 ... 그 문자열을 기반으로 새로운 변수를 만듭니다. 당신은 항상 당신이 다시 manual's page about the switch statement을 읽을 수 있습니다PHP 스위치 케이스 로직 작업

default: 
    $actpurch = "2"; 
    break; 

에 끝날 것

<?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

질문이 있으십니까? –

답변

0

$needle = "+0" 이후 :

여기 소스입니다.

+0

올바른 방법으로 다시 보급하려면 어떻게해야합니까? $ haystack은 실제로 고객이 구매 한 활성화 횟수에 따라 db 테이블에서 항목을 가져오고 변경됩니다. 그래서 질문은 : 어떻게하면 스위치 케이스가 변화하는 엔트리와 함께 작동하도록 할 수 있습니까? 전체 텍스트는 "+ #"을 제외하고는 동일하게 유지됩니다. 대부분은 '+0'이 될 것이지만, 그렇지 않은 경우에는 각 고객이 적절한 수의 정품 인증으로 제한되도록해야합니다. –

0

너는 "+0"의 고정 값을 가지고 $needle에있는 switch입니다. 따라서 귀하의 defaultcase 만 실행됩니다.

0

나는 스위치를 전혀 사용하지 않을 것이다. 당신이하려고하는 것은 정규 표현식으로 할 수있는 숫자를 추출하는 것입니다 (PHP Manual 참조). 예 :

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

정규 표현식은 패턴과 일치하는 문자열 (\ d +는 하나 이상의 숫자와 일치 함)과 일치합니다.