一次在特定位置插入多个字符串

时间:2012-08-07 08:32:23

标签: php substr

通过substr_replace,我可以在特定索引中插入一个字符串:

$a = 'abcdefg';
echo substr_replace($a, '1', 2, 0); // ab1cdefg

但是,是否有可能只用1 substr_replace在特定位置插入2-3个字符串? (或其他内置功能) 例如:

$a = 'abcdefg';
$b = array('1', '2', '3');
$c = array(1, 2, 4);
echo substr_replace($a, $b, $c, 0); // a1b2cd3efg

我尝试了该代码,但它返回了一个错误:

  

警告: substr_replace()[function.substr-replace]:'from'和'len'   应该是相同的类型 - 数字或数组

...谢谢

1 个答案:

答案 0 :(得分:3)

现在,首先,让我说通过阅读手册,我认为你的代码应该有用,你似乎遵循正确规定的规则。

更可笑的是,如果您尝试通过将0数组传递给$len来修复它(根据该错误消息听起来合理,不是吗?)you get this

  

警告:substr_replace():未实现'from'和'len'的功能

右。因此,不仅手册错了,甚至错误信息都会自相矛盾。上帝,我喜欢PHP。

但足够的这个,解决方案......


因为它不能按预期工作,所以你必须循环才能做你想做的事。不太难,对吧?那么,这里的主要绊倒危险是字符串的长度和偏移位置将在每次迭代时改变。为了防止此问题导致出现问题,您需要执行反向替换,以便索引处于您期望的位置。

这样的事情:

<?php

  $a = 'abcdefg';
  $b = array('1', '2', '3');
  $c = array(1, 2, 4);

  for ($i = count($c) - 1; $i >= 0; $i--) {
    $a = substr_replace($a, $b[$i], $c[$i], 0);
  }
  echo $a; // a1b2cd3efg

See it working