У меня есть цикл, который принимает большое количество текста на каждой итерации и заменяет определенный заполнитель («токен») другим содержимым, например:
$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 может содержать большое количество символов (тип поля TEXT в MySQL)?
foreach
к БД? Или читать целые файлы в память (file_get_contents
)? - person Mihai Stancu   schedule 17.07.2012$mdlGallery->getByCategory($row['id']);
вызовом базы данных? - person Marc Costello   schedule 17.07.2012db_connect -> query_connect -> execute_query -> read_results -> release_results -> close_query_connection -> db_close
каждый из этих псевдокодированных шагов происходит за кулисами, а некоторые из них абстрагируются вашими функциями SQL, вы не контролируете процесс связи для каждого запроса, вы просто инициируете его и получаете результат Ресурсы. - person Mihai Stancu   schedule 17.07.2012