2012-07-26 151 views
0

我需要计算数组$inputArr中所有值的频率以构建频率直方图。计算数组中值的频率

$query="SELECT delay FROM TestDB;"; 
$result=DatabaseConnector::ExecuteQueryArray($query); 
$inputArr = array(); 
foreach ($result as $row) { 
    $inputArr[] = array($row['delay']); 
} 

$freq = array_count_values ($inputArr); 

var_dump($freq)返回数组(0)。这很奇怪,因为var_dump($inputArr)返回以下结果(只是一个例子):

array(429) { 
    [0]=> array(1) { [0]=> string(1) "0" } 
    [1]=> array(1) { [0]=> string(1) "0" } 
    [2]=> array(1) { [0]=> string(1) "0" } 
    [3]=> array(1) { [0]=> string(1) "9" } 
    [4]=> array(1) { [0]=> string(2) "12" } 
    [5]=> array(1) { [0]=> string(1) "7" } 
    [6]=> array(1) { [0]=> string(2) "15" } 
    [7]=> array(1) { [0]=> string(1) "3" } 
    [8]=> array(1) { [0]=> string(2) "13" } 
    [9]=> array(1) { [0]=> string(1) "0" } 
    [10]=> array(1) { [0]=> string(1) "1" } 
    [11]=> array(1) { [0]=> string(2) "35" } 
    [12]=> array(1) { [0]=> string(2) "24" } 
    [13]=> array(1) { [0]=> string(2) "14" } 
    [14]=> array(1) { [0]=> string(1) "4" } 
    [15]=> array(1) { [0]=> string(1) "0" } 
    [16]=> array(1) { [0]=> string(2) "26" } 
    [17]=> array(1) { [0]=> string(1) "0" } 

正如可从这个输出可以看出,inputArr具有重复值,例如0. 那么,为什么$freq = array(0)

回答

4
$inputArr[] = array($row['delay']); 

您正在使$inputArr中的每个元素成为一个数组。你并不需要一个二维数组,在这里,只是做:

$inputArr[] = $row['delay']; 
5

我会考虑跳过PHP的一部分,并改变你的SQL语句来完成所有的工作对您:

SELECT delay, count(*) AS freq FROM TestDB GROUP BY delay;

+1

+1为了使数据库完成工作而不是PHP:-P – 2012-07-26 21:43:55