テキストのブロックと、テキスト内の特定の要素から配列($ matches)を作成するためのpreg_match_allシーケンスがあります。
次に、mysqliを使用して最初の配列の各文字列に対応するエントリを検索し、2番目の配列-($ replace)を受け取ります。
元のテキストの最初の配列の位置を2番目の配列に置き換え、最初の配列を再検索して$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を使用して、2番目の配列を元のテキストの最初の配列の場所にドロップします。
通常、これは問題ありませんが、配列マークの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>';