2012-03-02 8 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. "생년월일"을 상수로 정의하지 않은 경우, 문자열로 취급되므로 상수로 사용해야합니다.

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 항상 할 수있는이 방법을 그룹에 추가 할 그룹을 가지고 배열 당신은 그 그룹을 원하고 더 조작 할 수 있습니다.

관련 문제