2012-03-02 4 views
3

Итак, у меня есть массив, он имеет 1000 строк, а столбец содержит возраст пользователя, im пытается определить, как подсчитать количество строк для людей, которые < 17 , 17-25, 26-40 и т.д.Подсчитайте количество строк с определенным значением массива

Я знаю, что это возможно с циклом:

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 массив, который имеет группу вы хотите и дальше манипулировать этой группой.