各反復で大量のテキストを取得し、特定のプレースホルダー (「トークン」) を次のような他のコンテンツに置き換えるループがあります。
$string = $pageContent;
foreach($categories as $row) {
$images = $mdlGallery->getByCategory($row['id']);
if (!empty($images)) {
$plug = Plugin::get('includes/gallery', array('rows' => $images));
$string = str_replace($row['token'], $plug, $string);
}
}
Plugin クラスとその get() メソッドは、特定のディレクトリから適切なファイルを取得し、バッファを文字列として出力するだけです。
多数のカテゴリが存在する可能性があるため、次のように strpos() 関数を使用して特定のカテゴリからすべての画像を入力する前に、特定の「トークン」の出現について入力文字列を最初に確認する方がよいかどうか疑問に思います。
foreach($categories as $row) {
if (strpos($string, $row['token']) !== false) {
$images = $mdlGallery->getByCategory($row['id']);
if (!empty($images)) {
$plug = Plugin::get('includes/gallery', array('rows' => $images));
$string = str_replace($row['token'], $plug, $string);
}
}
}
私の懸念はパフォーマンスです-これは役に立ちますか? - $string には潜在的に多数の文字 (MySQL の TEXT フィールド タイプ) が含まれると考えられますか?