изменение строки "рекурсивно" в PHP - PullRequest
0 голосов
/ 27 февраля 2011

Я хочу изменить строку (в 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;
    }

}

1 Ответ

1 голос
/ 27 февраля 2011

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

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

}
...