私は、レンダリングに2.8秒かかるPHPページがあります。このページにはforeach
ループを経由してfile()
行目(〜5000行)でtxtファイルを読み取るスクリプトが含まれています。これは完全に動作し、私は<div>
の各行をラップすることができます。これはすべてこのようなものに見えます。効果的なデータベースの一括検索
$text_file = 'path/to/my/text/file.txt';
$lines = file($text_file);
$output = '';
foreach($lines as $line_num => $line){
$output .= '<div id="'.$line_num.'" class="line">'.htmlspecialchars($line).'</div>'."\n";
}
echo $output;
問題は、私は行番号がデータベース内にある場合を照会する必要があり、それがある場合はそれに余分なクラスhighlight
を与えることです。これは、ページを非常にゆっくりとレンダリングさせるものです。各行(〜5000)は、ループ内のデータベースを照会しています。これはこのようなものです。
foreach($lines as $line_num => $line){
// codeigniter is being used here
$line_exists = $this->line_model->lookup_line($line_num);
// $line_exists checks the database if the $line_num exists it will return true/false
if($line_exists){
$lines_output .= '<div id="'.$line_num.'" class="line highlight">'.htmlspecialchars($line).'</div>'."\n";
}else{
$lines_output .= '<div id="'.$line_num.'" class="line">'.htmlspecialchars($line).'</div>'."\n";
}
}
私の質問はです:これを行うには、より効率的な/より高速な方法はありますか?
これは理にかなっています。 $ look_lineは、$ line_numが存在すればデータベースをチェックし、true/falseを返します。 – ThomasReggi
@ThomasReggiチェックが単純ならば、単純にファイル内の行数に基づいてクエリ内の範囲を持つことができます。 '' .. where line_nunber> = 0そしてline_number <".count($ lines)' –