我有一个文本块和一个 preg_match_all 序列来从文本中的某些元素创建一个数组($matches)。
然后,我使用 mysqli 为第一个数组中的每个字符串查找相应的条目,并接收第二个数组 - ($replacement)。
我想用第二个数组替换原始文本中第一个数组的位置,重新找到第一个数组并将其命名为 $arraytoreplace。这是我使用的代码:
$replacement = array();
$myq = "SELECT code,title FROM messages WHERE ID=?";
if ($stmt = $mysqli2->prepare($myq)) {
foreach($matches[1] as $value) {
$stmt->bind_param("s", $value);
$stmt->execute();
// bind result variables
$stmt->bind_result($d,$cc);
if($stmt->fetch()) {
$replacement[] = '<a href="'. $d .'">' . $cc . '</a>';
}
}
$stmt->close();
}
如果我在 str_replace 之前在数组上使用 var_dump ,如下所示:
var_dump($arraytoreplace);
var_dump($replacement);
我得到:
array(4) {
[0]=> string(3) "111"
[1]=> string(2) "12"
[2]=> string(4) "1234"
[3]=> string(1) "0"
}
array(4) {
[0]=> string(5) "hello"
[1]=> string(2) "hi"
[2]=> string(3) "foo"
[3]=> string(3) "bar"
}
然后我使用 str_replace 将第二个数组放到原始文本中第一个数组的位置。
通常这很好,但是一旦达到数组标记中的 10 个字符串,一切都会中断。而不是Text hello text hi
我会得到Text 11foo text foo1
或同样奇怪的东西。
有任何想法吗?
编辑:用于替换数组的代码如下:
$messageprep = str_replace($arraytoreplace, $replacement, $messagebody);
$messagepostprep = str_replace('#', '', $messageprep);
echo '<div class="messagebody">' . $messagepostprep . '</div>';