2012-03-02 58 views
3

所以我有一個數組,它有1000行,並且一列包含用戶的年齡,我試圖確定如何計算行數爲< 17 ,17-25,26-40等具有特定值的數組的行數

我知道這是可能的for循環:

for($i=0,$i<$totalrows,$i++) 
    $birthdate=$array[$i][birthdate]; 
    if($birthdate>1995) 
    { 
     $seventeen=$seventeen+1; 
    } 
    elseif 
    { 
     etc... 

但有一個內置的功能,可以做到這一點,而不是需要爲循環做的計算所有的值?一旦計數達到數百萬不會對服務器造成嚴重的負擔?

編輯/我應該這樣做,像5個不同的SQL選擇?只使用一個計數(*)?那會更有效率嗎?

回答

1

您可以使用array_filter(),然後從count()返回值。

$seventeen = count(array_filter($array, 
           function ($entry) { 
            return ($entry['birthdate'] > 1995); 
           } 
           ) 
       ) 

N.B.除非您已將「birthdate」定義爲常量,否則應該引用它,以便將其視爲字符串。

1

您可以在獲取數據時使用sql進行計數。就處理性能而言,這完全取決於查詢請求。

至於PHP,你可以做的是創建一個多維數組。

$arr = array(
    '0-16' => array(

    ), 
    '17-25' => array(

    ), 
    '26-40' => array(

    ) 
); 

,當你取一組將它們添加到組

while ($query as $result) { 
    if ($result['age'] < 17) { 
     $arr['0-16']['age'] = $result['age']; 
     $arr['0-16']['name'] = $result['name']; 
    } 
} 

然後做一個計數

echo count($arr['0-16'])

這種方式,您可以隨時print_r具有組數組你想要和進一步操縱這個羣體。

相關問題