[英]php mysql and in_array performance
有什么可以提高性能的吗? 因为花费了大约8秒。 car_models数据库拥有超过100.000条记录,cars数据库拥有超过20.000条记录,而最终car_parts具有超过20.000条记录。 我可以为数据库做类似关键字的事情。 但是问题是数据库是动态的。 我的意思是编辑每天都会增加记录。 而且我无法接触软件的一部分,因为它不是开源的...
$news = dbquery("SELECT * FROM " . DB_NEWS . " ORDER BY news_id DESC LIMIT 0,1");
while ($news_data = dbarray($news))
{
echo $news_data['news_subject'];
$news_first_part = str_replace("\\", "", $news_data['news_news']);
$news_first_part = explode('.', $news_first_part); //first phrase
$news_first_part = $news_first_part[0];
$news_second_part = str_replace("\\", "", $news_data['news_extended']);
$find = array();
$keywords = dbquery("SELECT name FROM cars GROUP BY name");
while ($keywords_data = dbarray($keywords))
{
$my_keyword = $keywords_data['name'];
$news_first_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_first_part);
$news_second_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_second_part);
if ($news_first_part OR $news_second_part AND !in_array($my_keyword, $find,true))
{
array_push($find, $my_keyword);
}
}
$my_keyword="";
$keywords = dbquery("SELECT name FROM car_models GROUP BY name");
while ($keywords_data = dbarray($keywords))
{
$my_keyword = $keywords_data['name'];
if (strlen($my_keyword) > 10 && !in_array($my_keyword, $find, true))
{
$news_first_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_first_part);
$news_second_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_second_part);
}
}
$keywords = dbquery("SELECT name FROM car_parts GROUP BY name");
while ($keywords_data = dbarray($keywords))
{
$my_keyword = $keywords_data['name'];
if (strlen($my_keyword) > 10)
{
$news_first_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_first_part);
$news_second_part = str_replace($my_keyword, "<a href='keyword.php?keyword=$my_keyword' title='$my_keyword'>$my_keyword</a>", $news_second_part);
}
}
$my_keyword="";
echo $news_first_part . '.'; //note I added the final ponctuation
$news_first_part .= ".";
$news_second_part = str_replace($news_first_part, "", $news_second_part);
echo nl2br($news_second_part);
}
您可以构建某种数组树结构,以限制子数组的大小。 该数组将变为:
代替
如您所见,in_array将变得更快。
注意:“外部”数组可以由第一个字母(或2、3、4等)组成,具体取决于集合的大小。
在PHP代码中,您将得到类似
$word = "ananas";
$arr = array();
if (!isset($arr[$word{0}]) || !in_array($word, $arr[$word{0})) {
// New word
if (!isset($arr[$word{0}])) {
$arr[$word{0}] = array($word);
} else {
$arr[$word{0}][] = $word;
}
}
以这种方式尝试,它快得多。
if ($news_first_part OR $news_second_part AND !isset($find[$my_keyword]))
{
$find[$my_keyword] = 1;
}
相应地更新其余代码。 实际上,您无需在此处使用!isset($find[$my_keyword])
检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.