我有一个数组列表,我需要对其应用一些逻辑,数组中的每个元素都引用我数据库中的一个类别。
到目前为止,我正在使用 foreach 循环中的计数来计算该类别在我的数据库中应用的次数。有没有办法把这个计数移到我的 foreach 循环之外?到目前为止,它的运行速度并不慢,基准为 0.00241899490356。
但我有超过 150 个类别,每个类别都循环并计数 6 次。我担心随着类别使用和数据库空间的增加,它会变得迟缓。我读到数据库操作不应该在循环中。在类似情况下,这种做法是否可行且可以原谅?
编辑 :: 我真的很抱歉我缺少代码。我通常先勾勒出问题,然后填上漏洞。我的时间用完了。不是马虎的借口,但这是我的借口。在阅读当前回复之前,我现在会修复。
$nazioni = array(
'ad' => array( 'eur', ),
'ae' => array( 'asi', ),
'af' => array( 'asi', ),
'ag' => array( 'nam', ),
'al' => array( 'eur', ),
'am' => array( 'asi', 'eur', ),
...
'za' => array( 'afr', ),
'zm' => array( 'afr', ),
'zw' => array( 'afr', ),
);
$categorie = array(
'eur',
'asi',
'afr',
'nam',
'sam',
'oce',
);
echo '<ul>';
foreach($categorie as $cat)
{
echo '<li><a href="#">'.$cat.'</a></li>';
echo '<ul>';
foreach($nazioni as $n=>$c)
{
if(array_intersect(array($cat), $c) == true)
{
echo Filtra::uri_locale($n, $cat, $uri);
}
}
echo '</ul>';
}
echo '</ul>';
}
计数在我的 Filtra::uri_locale 操作中完成。
public static function uri_locale ($n, $cat, $uri)
{
$count = DB::table('recipes')
->where(function($query)
{
$corso = Filtra::corso(explode("/", URI::current()));
if(!empty($corso))
{
$query->where_in('course', $corso, 'OR');
}
})
->where('nation', '=', $n)->count();
//if more than 0, or not empty and in the uri array.
if($count > 0 || !empty($uri) && array_intersect(array($n), $uri))
{
return self::uri_href($uri, $n, $count);
// ex: returns a link named Italy (3) if Italy has 3 results counted.
}
}
我正在查找的相关数据库表:
| id | title | nation | course |
————————————————————————————————
| 1 | Pizza | it | 4 |
它被翻译成意大利,课程用于另一层分类,使用相似的逻辑,相同的解决方案来解决相同的问题。
再次,对这种混淆感到非常抱歉,我已经超出了我的头脑和最后期限。