我有一個我需要應用一些邏輯的數組列表,我的數據庫中的每個元素都引用了一個類別。在foreach循環之外移動count()
到目前爲止,我在使用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 |
它被翻譯成意大利,當然是用於歸類的另一層它採用了類似的邏輯,同樣的解決方案相同的問題。
再一次,真的很抱歉這混亂,我的方式在我的頭和截止日期。
ü也許應該包括一些代碼 – KTastrophy
很難想像這樣的問題。請添加一些代碼。 –
你可以使用array_count_values()來計算數組中有多少個值。 – Anonymous