0

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

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

但是,是否可以仅使用 1 在特定位置插入 2-3 个字符串substr_replace?(或其他内置函数)例如:

$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' 应该是同一类型 - 数值或数组

谢谢...

4

1 回答 1

3

现在,首先,让我说,通过阅读手册,我会认为你的代码应该可以工作,你似乎正确地遵循了规则。

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

警告: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

看到它工作

于 2012-08-07T09:10:17.773 回答