我需要一些幫助,下面的代碼。我在桌子上有一個字段,我需要替換各種標籤,並且已經確定了針對特定區域所需的正則表達式模式。這段代碼將這些代碼拉出來,並將它們剝離成我想要的格式,但是它將它們分配到了所有相同的「imageId」 - body中的最後一個。我知道它不是以正確的方式循環,只需要另一組眼睛就可以了。我感覺如果它通過Body並且一次替換一個標籤而不是在for循環中間,它可能會按照它應該做的。目前該領域的身體看起來是這樣的:PHP preg替換循環問題
<text:image id="12345" blah blah blah />
lots of text here
<text:image id="123456" blah blah blah />
lots of text here
<text:image id="7890" blah blah blah />
我希望它看起來像這樣:
<text:image id="12345"/>
lots of text here
<text:image id="123456" />
lots of text here
<text:image id="7890" />
下面是代碼:
$textToReplace2 = mysqli_query($conn, "SELECT id, body from t1");
while($row2 = $textToReplace2->fetch_array()) {
$t1_id = $row2["id"];
$body = $row2["body"];
$oldBody = $body;
$pattern = '#(text:image id=)"\d+(.*)(/>)#';
preg_match_all($pattern, $body, $matches);
foreach ($matches[0] as $match) {
$id=$match;
preg_match('#\d+#', $id, $nextMatches);
foreach ($nextMatches as $nextMatch) {
$imageId=$nextMatch;
$newBody = preg_replace($pattern, 'ID:'.$imageId, $body);
$newEscapedBody = mysqli_real_escape_string($conn, $newBody);
$update2 = "UPDATE T1 SET body = '$newEscapedBody' where id = '$t1_id'";
$updateResult2 = mysqli_query($conn, $update2);
}
}
}
所有那些括號在哪裏關閉? –
複製粘貼問題,他們在那裏 – caro
'UPDATE T1 SET body ='$ newEscapedBody'其中id ='$ t1_id''在這裏,您正在循環的每一步更新ID爲'$ t1_id'的記錄。在每一步中,您都會一次又一次更新相同的記錄。因此,循環最後一步中更新的值將保留在表中。 –