2012-04-03 6 views
0

특정 문자열을 이미지로 바꾸는 방법을 찾고 있습니다. 모든 문자열은 {}로 묶여 있으며 코드가 볼 때 [안쪽에있는 내용은] 읽히고 그 내용은 특정 이미지가됩니다. 나는 이것을 구현하는 방법을 가장 안 좋게 지키지 않았으며, 누군가가 내게 모범을 보여주기를 희망했다.문자열을 이미지로 바꾸기

여기에 더 나은 설명 내 예입니다 : 그래서

{1} is replaced with an image 

코드이 (가) {}이 활성화 볼 때. 이제는 코드의 다른 부분을 간섭하지 않으므로 1 문자 및 특정 문자로 제한됩니다. 이것은 마술 카드 캐스팅 비용을보다 구체적으로 나타 내기위한 것입니다. 그래서

B, U, R, G, W, X, T, 1-99 ============

위해 ..... 너무 제한 될 ===================

이렇게 ..... 이런 식으로 뭔가?

$image_string = '{R}{R}{R}{3} 

$Mana_symbol ='BURGWXT1-99'; 

$output = preg_replace_all('/\{([' . $Mana_symbol. '])\}/', '<img src="\1.png"/>', $string); 

switch ($output) 
{ 
    case ('B'): 
     $mana = '<img src = "black_mana.png"/>'; 
     break; 
    case ('U'): 
     $mana = '<img src = "blue_mana.png"/>'; 
     break; 
    case ('G'): 
     $mana = '<img src = "green_mana.png"/>'; 
     break; 
    case ('R'): 
     $mana = '<img src = "red_mana.png"/>'; 
     break; 
    case ('W'): 
     $mana = '<img src = "white_mana.png"/>'; 
     break; 
    case ('1'): 
     $mana = '<img src = "1_colorless_mana.png"/>'; 
     break; 
    case ('2'): 
     $mana = '<img src = "2_colorless_mana.png"/>'; 
     break; 
    case ('3'): 
     $mana = '<img src = "3_colorless_mana.png"/>'; 
     break; 

     ....etc.... 

이렇게 여러 인스턴스가있을 예정이므로 preg_replace_all을 사용해야합니까? 위의 $ image_string과 같은 예제에서와 같이 일치하는 문자열의 모든 어커런스를 바꿉니 까?

+0

문자열은 DB 나 파일 또는 사용자 입력에서 읽거나 그들이 기존에 포함되어 있습니까 HTML 또는 PHP? 지금까지 {} 내의 값을 대체하는 것은 일종의 맵 또는 조회를 가지고 있습니까? 아니면 데이터베이스 테이블에 저장된 것입니까? – TheOx

+0

정보가 XML 파일에서 가져온 다음 변수가 할당되고 끌어온 정보에서 게시물이 자동으로 만들어집니다. –

답변

3

여기 (http://www.php.net/pcre 참조) 정규 표현식을 사용하는 예제입니다 :

는 이미지가 태그 {x}에 대한 x.png이라고 말 : 당신은 더 설명이 필요한 경우

<?php 

$string = '{1} is replaced with an image'; 

// Use a regular expression 
// The codes below will be placed into a character class 
$validCodes = 'BURGWXT0-9'; 

// This array contains the image transforms 
$images = array(
    'B' => 'black_mana.png', 
    'U' => 'blue_mana.png', 
    // ... 
); 

// Use preg replace to insert the images 
$string = preg_replace_callback(
    '/\{([' . $validCodes . ']+)\}/', 
    function($m) use ($images) { 
     if (isset($images[$m[1]])) { 
      return '<img src="' . $images[$m[1]] . '"/>'; 
     } 
     return ''; 
    }, 
    $string 
); 

echo $string; 

?> 

가 요청하시기 바랍니다.

편집

난 당신이 배열을 채워 자신의 변환을 추가 할 수있는 메커니즘을 추가했습니다.

preg_replacepreg_replace_callback은 문자열에서 발견되는 모든 발생을 대체합니다.

내가 사용한 익명 함수는 PHP 5.3.0 이상에서만 사용할 수 있습니다 (http://php.net/manual/en/functions.anonymous.php).

난 그냥 정규식의 문자 클래스의 모든 문자를 캡처 할 것이라는 점을, 당신은 당신의 코드의 일부를 캡처 문자 클래스 후 +를 필요 거라고 깨달았다 2

편집 .

+0

코멘트에 넣기에는 너무 커서 제 답변을 위의 원본 게시물에 추가했습니다 :) –

+0

업데이트 된 답변보기. – Pete

+0

안녕 피트는 제품 데이터를 삽입 할 때 전체 설명 영역을 삭제합니다. 이 코드를 살펴 보시겠습니까? http://codepad.org/okkOKaIj .... 또한 PHP 5.3.10을 실행 중이며 익명의 함수가 제대로 작동합니다. –

1

는 Youu 모든 {}의 밖으로 다음이를 않는 str_replace 구문 분석하는 정규 표현식을 사용할 수 나중에

preg_match_all('/{(1|2|3|99|a)}/', "{1} is replaced with an image{a} {99}", $match)

관련 문제