2014-12-10 3 views
-1

개발자 stdClass 객체를 사용하여 그에 따라 처리하는 작은 CMS에서 작업하고 있습니다. stdClass에는 배열 및 기타 개체가 포함되어 있습니다. 이러한 객체 중 하나는 변수 객체입니다. 변수 객체가 많이있을 수 있습니다.문자열의 자리 표시 자 일치 및 바꾸기

덜 혼란스럽게 만들기 위해 코드를 보여주는 대신 설명 할 것입니다. 개발자는 변수와 해당 변수에 들어갈 수있는 값 집합을 지정합니다. 사용자가 지정하는 값은 다차원 배열 일 수 있습니다.

//Add variable1 
$variable = $variables[] = new stdClass; 
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function'; 
//Add variable2 
$variable = $variables[] = new stdClass; 
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function'; 

현상이 변수가 배치 될 위치를 지정할 수있는 stdClass 어느 시점이 변수는 객체를 생성하는 방법의 일례이다. 자리 표시 자 템플릿은 다음과 같습니다. $variables[0] 첫 번째 변수를 선택하거나 $variables[0][1] 첫 번째 변수를 선택한 다음 해당 변수의 첫 번째 요소를 선택합니다. 나는 그것이 의미가 있기를 바랍니다.

필자는 텍스트 조각을 통과하고 모든 자리 표시자를 올바른 값으로 바꾸는 PHP 알고리즘을 고안해야합니다.

내 솔루션

  • 새로운 배열로 모든 변수 -> 값을 가져옵니다. 나는 이것을 성공적으로 해냈다.
  • 텍스트의 모든 자리 표시자를 가져옵니다. 나는이 시점에서 붙어있다. 나는 정규 표현식을 많이 사용하지 않는다.
  • 제가 사용 시작일 :

    으로, preg_match_all를 ('/ \ $ 변수 [0-9A-ZA-Z] +] /'$ 텍스트를 $ matched_placeholders); 이 ..하지만

$variables[0] 일치하고 나는이 같은 변화에 맞게 확장 트링 오전 : 나는 배열에 자리하고 변수 값이 있으면 등 $variables[0][1] 또는 $variables[0][2][0],

을 다른 배열로. foreach 루프를 수행하고 모든 자리 표시자를 바꿀 수 있습니다.

모든 조언을 주시면 감사하겠습니다. 이 정규식 패턴과 일치해야하는 정규식 패턴은 $variables[0][2][0] ...이 일치

preg_match_all('/\$variables((\[[0-9a-zA-Z]+\])*)/', $text, $matched_placeholders); 

:

답변

0

귀하의 preg_match_all 기능은 같은 모양

  • $variables
  • $variables[#]
  • $variables[#][#]
  • 을 등
  • ,363,210

그리고 $text = '$variables[0][1] or $variables[0][2][0]';$matched_placeholders[1]

테스트에서 [#][#][#]... 부분을 저장합니다 : 예를 들어, 당신이 (당신의 변수 이름을 변경하고 싶었 경우

Array (
    [0] => Array ( 
     [0] => $variables[0][1] 
     [1] => $variables[0][2][0] 
    ) 
    [1] => Array ( 
     [0] => [0][1] 
     [1] => [0][2][0] 
    ) // The rest is just "noise" 
    [2] => Array ([0] => [1] [1] => [0]) 
) 

나는 당신이 실제로하는지 아무 생각이 없기 때문에 하려고하지만 그냥 정규식 부분을 돕는), 할 수있다 :

$text = preg_replace('/\$variables((\[[0-9a-zA-Z]+\])*)/', '\$newvar$1', $text); 

어떤 replac 모든 경우는 $variables이고 $newvar입니다.

+0

안녕하세요. 입력 해 주셔서 감사합니다. 당신은 정말로 도움이되었습니다. 문제 해결됨! – user3072613

-1

이 작동합니다 : -

str.replaceAll (,);