【问题标题】:changing a string 'recursively' in PHP在 PHP 中“递归”更改字符串
【发布时间】:2026-01-24 15:30:01
【问题描述】:

我想使用几个条件来更改字符串(在 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;
    }

}

【问题讨论】:

  • 你得到什么错误?你怎么知道它与变量作用域有关?
  • 我认为你的意思是 //用 $newstring 做一些事情。我不认为这是一个变量范围的问题..
  • @Jeremiah:好吧,我没有收到错误。我得到了 switch 语句所做的最后一个更改,这只是一个更改,而不是应用于字符串的几个更改。
  • @amitchd:对。最后一刻改变。我会改正的。
  • @Robert:就像@amitchd 所说的那样,您确定在每个替换中都使用$newstring 而不是$string

标签: php string switch-statement


【解决方案1】:

您正在通过每次替换 text1 上的文本来覆盖您对 newstring 的更改。您需要在任何地方使用 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;
    }

}

【讨论】:

  • 不错。有效!。只有一个小错误“第 9 行中的未定义偏移量”(切换行)。
  • 哦,出现这个错误是因为 $i