php 在另一个字符串的每个字符之前前置字符串

3qpi33ja  于 2023-05-16  发布在  PHP
关注(0)|答案(2)|浏览(174)

我有以下代码:

$target = "abcwa";

for($w = 0; $w <=strlen($target)-1; $w++)
{
  $str = str_split($target[$w],1); //a
  $str_ = $str[$w];
            
  echo "w:";$w;
  echo $str_;
}// end for w

正在打印:

w:a
Warning: Undefined array key 1 in /in/n705C on line 8
w:
Warning: Undefined array key 2 in /in/n705C on line 8
w:
Warning: Undefined array key 3 in /in/n705C on line 8
w:
Warning: Undefined array key 4 in /in/n705C on line 8
w:

第8行是$str_ = $str[$w];
但是,目标是打印:w:aw:bw:cw:ww:a
怎么了?

lhcgjxsq

lhcgjxsq1#

你的循环有:

$w <= strlen($target) - 1

这通常是通过以下方式完成的:

$w < strlen($target)

但这里根本不需要任何循环。首先将字符串拆分为一个由单个字母组成的数组:

str_split($target);

这为您提供:['a', 'b', 'c', 'w', 'a']
然后将该数组重新组合成一个字符串,但每个元素之间有"w:"

echo implode('w:', str_split($target));

这为您提供:

aw:bw:cw:ww:a

然后,只需添加您的前导"w:"

echo 'w:' . implode('w:', str_split($target));

其产生:

w:aw:bw:cw:ww:a

或者,你可以在字符串的开头添加一个空格,这样split的开头就有一个额外的字符,以便内爆操作:

echo implode('w:', str_split(' ' . $target));

其产生:

w:aw:bw:cw:ww:a

(Note在这种情况下,输出中有一个额外的空间,如果这很重要的话。)

v8wbuo2f

v8wbuo2f2#

我会放弃你的原始代码,因为它是冗长的,有多个失败的组件。
相反,只需使用regex在每个字符前插入所需的字符串即可。
代码:(Demo

echo preg_replace('/./', 'w:$0', $target);

或者

echo preg_replace('/(?=.)/', 'w:', $target);

相关问题