2013-02-26 6 views
0

나는 작업중인 게임에 대한 알림 시스템을 만들고 있습니다.문자열 텍스트를 배열의 변수로 바꿉니다.

배열을 통해받은 데이터로 '변수'가 설정되도록 문자열로 메시지를 저장하기로 결정했습니다. 메시지의

예 :

This notification will display !num1 and also !num2

나는 모양을 내 쿼리에서받는 배열 :!

[0] => Array 
    (
     [notification_id] => 1 
     [message_id] => 1 
     [user_id] => 3 
     [timestamp] => 2013-02-26 09:46:20 
     [active] => 1 
     [num1] => 11 
     [num2] => 23 
     [num3] => 
     [message] => This notification will display !num1 and also !num2 
    ) 

할 원하는 것은 함께 NUM2 교체 NUM1하고있다 값을 배열 (11, 23)에서 가져옵니다.

메시지가 message_tbl의 쿼리에 INNER JOINed입니다. 까다로운 부분이 null로 저장된 num3이라고 가정합니다.

두 가지 테이블에서만 모든 유형의 메시지에 대한 모든 알림을 저장하려고합니다.

또 다른 예는 다음과 같습니다

[0] => Array 
    (
     [notification_id] => 1 
     [message_id] => 1 
     [user_id] => 3 
     [timestamp] => 2013-02-26 09:46:20 
     [active] => 1 
     [num1] => 11 
     [num2] => 23 
     [num3] => 
     [message] => This notification will display !num1 and also !num2 
    ) 
[1] => Array 
    (
     [notification_id] => 2 
     [message_id] => 2 
     [user_id] => 1 
     [timestamp] => 2013-02-26 11:36:20 
     [active] => 1 
     [num1] => 
     [num2] => 23 
     [num3] => stringhere 
     [message] => This notification will display !num1 and also !num3 
    ) 

성공적으로 교체 PHP의 방법이 있나요 NUM (x)는 배열의 올바른 값!? 여기

답변

1
당신은이 같은 정규 표현식 및 사용자 정의 콜백,이 작업을 수행 할 수 있습니다

:이 출력 것을 this demo에서 볼 수

$array = array('num1' => 11, 'num2' => 23, 'message' => 'This notification will display !num1 and also !num2'); 
$array['message'] = preg_replace_callback('/!\b(\w+)\b/', function($match) use($array) { 
    return $array[ $match[1] ]; 
}, $array['message']); 

:

This notification will display 11 and also 23 
그러한 빠른 응답에 대해 감사합니다.
+0

. 완벽 해 보입니다. 비어 있지 않은 값을 먼저 찾음으로써'$ array'를 설정할 수 있을까요? –

+0

그게 당신이해야 할 일이라면. – nickb

+0

그것은 당신의 데모에서 작동하는 것처럼 보입니다. 그러나 제 코드에 넣으면 에러가납니다 :'구문 분석 오류 : 구문 오류, 예기치 않은 T_FUNCTION'이유가 무엇입니까? - NVM - 내 PHP 버전이 5.2로 설정되었고 인식되지 않았습니다. 5.4로 변경되면서 고쳐졌습니다. –

1

:

$replacers = array(11, 23); 
foreach($results as &$result) { 
    foreach($replacers as $k => $v) { 
     $result['message'] = str_replace("!num" . $k , $v, $result['message']); 
    } 
} 
관련 문제