2011-02-27 2 views
0

Я хочу изменить строку (на PHP), используя несколько условных выражений, чтобы определить, какие изменения должны быть сделаны, обновить строку и продолжить изменение обновленной строки.изменение строки «рекурсивно» в PHP

Например, начните со строки и на основе условия, внесите изменения в символ, затем используйте вторую версию строки и на основе другого условия измените ее еще и так далее способ, который в конце процесса, изменения были кумулятивными.

По-видимому, переменная сфера предотвращает следующий подход:

$newstring = "This is a test string"; 
$value[] // This is an array already defined. 

for ($i = 0; $i<=count($value); $i++) { 
    switch ($value[$i]) { 
    case -1: 
     $newstring = preg_replace(// do something with $newstring); 
     break; 
    case 0: 
     $newstring = preg_replace (// do something else with $newstring); 
     break; 
    case 1: 
     $newstring = substr_replace(//do something else with $newstring); 
     break; 
    } 
} 

Есть ли способ сделать это?

Заранее спасибо.

ОБНОВЛЕНИЕ: Вот мой код. Как вы можете ожидать, $_POST['text1'] - это строка, а $_POST['array'] - это двумерный массив.

$text1 = $_POST['text1']; 
$value = $_POST['array']; 

for ($i = 0; $i<=count($value); $i++) { 
switch ($value[$i][0]) { 


    case -1: 
     $newstring = preg_replace("/".$value[$i][1]."/","",$text1,1); 
     break; 
    case 0: 
     break; 
    case 1: 
     $newstring = substr_replace($text1, $value[$i][1],$value[$i][2],0); 
     break; 
    } 

} 
+0

Какая ошибка возникает у вас? Как вы знаете, что это связано с переменной областью? –

+1

Я думаю, что вы имели в виду // что-то делать с $ newstring .. Я не думаю, что это проблема с переменной областью. – amitchd

+0

@Jeremiah: У меня нет ошибки. Я получаю последнее изменение, сделанное оператором switch, которое представляет собой только одно изменение вместо нескольких изменений, применяемых к строке. –

ответ

1

Вы заменяете свои изменения на newstring, заменяя текст на text1 каждый раз. Вам нужно сохранить эти изменения, используя везде везде.

$text1 = $_POST['text1']; 
$value = $_POST['array']; 
$newstring = $text1; 
for ($i = 0; $i<=count($value); $i++) { 
switch ($value[$i][0]) { 


    case -1: 
     $newstring = preg_replace("/".$value[$i][1]."/","",$newstring,1); 
     break; 
    case 0: 
     break; 
    case 1: 
     $newstring = substr_replace($newstring, $value[$i][1],$value[$i][2],0); 
     break; 
    } 

} 
+0

О, давайте попробуем это :-). –

+0

Ницца. Это сработало!. Только незначительная ошибка «Неопределенное смещение в строке 9» (линия коммутатора). –

+0

О, эта ошибка появилась потому, что $ i <= count ($ value) вызывал несуществующий индекс. Иеремия был прав. –

Смежные вопросы