计算PHP数组中值的出现次数

计算PHP数组中值的出现次数,php,arrays,sql-server,group-by,count,Php,Arrays,Sql Server,Group By,Count,我已将SQL查询的结果加载到数组中。字段为ComputerName、时间(以天为单位)、房间、键入ComputerName 我想知道每天发生多少次 数组的示例值为: [STU-CZC1087SNC] => Array ( [ComputerName] => STU-CZC1087SNC [time_in_days] => 0 [room] => 4Q08 ) [STU-CZC02501QT] => A

我已将SQL查询的结果加载到数组中。字段为ComputerName、时间(以天为单位)、房间、键入ComputerName

我想知道每天发生多少次

数组的示例值为:

[STU-CZC1087SNC] => Array
    (
        [ComputerName] => STU-CZC1087SNC
        [time_in_days] => 0
        [room] => 4Q08
    )

[STU-CZC02501QT] => Array
    (
        [ComputerName] => STU-CZC02501QT
        [time_in_days] => 12
        [room] => 2R017
    )
所以我想知道有多少台计算机的时间为12天,有多少台计算机的时间为0天

它将用于绘制图形


我该怎么做/最好的方法是什么?

可能是数组计数值,请参阅手册:

试试这个,其中$input是包含计算机数据的数组:

$result = array();
foreach($input as $computerName => $arr){
  if(!isset($result[ $arr['time_in_days'] ]))
    $result[ $arr['time_in_days'] ] = 0;
  $result[ $arr['time_in_days'] ]++;
}
return $result;
结果将类似于:

[
  12 => 2, //2 computers have time_in_days of 12
  0 => 1  //1 computer has time_in_days of 0
]

好的,下面是一个工作示例:

<?php

$computerarray = [
'STU-CZC1087SNC' => Array
(
    'ComputerName' => 'STU-CZC1087SNC',
    'time_in_days' => 0,
    'room' => '4Q08'
),

'STU-CZC02501QT' => Array
(
    'ComputerName' => 'STU-CZC02501QT',
    'time_in_days' => 12,
    'room' => '2R017'
),
'STU-CZC02501QF' => Array
(
    'ComputerName' => 'STU-CZC02501QT',
    'time_in_days' => 12,
    'room' => '2R017'
)    
];


$myarray = array();
foreach($computerarray as $key => $val){
    $myarray[] = $val['time_in_days'];
}

echo "<pre>";
$myarray = array_count_values($myarray);
print_r($myarray);
此代码计算圆内的成员数。它将成员表id与当前圆圈id匹配。其当前值为$c['id']=1

$computerarray = [
    'STU-CZC1087SNC' => ['ComputerName' => 'STU-CZC1087SNC','time_in_days' => 0,'room' => '4Q08'],
    'STU-CZC02501QT' => ['ComputerName' => 'STU-CZC02501QT','time_in_days' => 12,'room' => '2R017'],
    'STU-CZC02501QF' => ['ComputerName' => 'STU-CZC02501QT','time_in_days' => 12,'room' => '2R017']    
];

var_export(array_count_values(array_column($computerarray,'time_in_days')));

我将删除我对以下问题的评论:

最好的方法是不使用php,而是使用sql按时间和调用计数进行分组。这里有一个推进去的

对于无条件、功能性的方法,这里是一个单行程序,使用专门为此任务设计的两个功能:和

代码:

输出:


与我的回答几乎相同,使用此代码您将收到大量通知。只需添加错误报告0;防止这些-P+1分。。我花了很长时间才明白:我不认为这是OP要求的通用解决方案。当计算机数据中有任意数字时,这不起作用。例如time_in_days=15和time_in_days=2等@MarkBaker请改进此仅限代码的答案,并稍加解释。使用此仅限代码的答案稍加解释将有助于未来的读者。我建议使用if/else,因为如果if为真,您将写入0,然后立即覆盖到1。如果…{…=1}或者{++}我真的更喜欢这样。在我看来,可读性/可理解性更好的代码是:总是递增1。和功能分离:如果未设置,则初始化该值。
<?php

$computerarray = [
'STU-CZC1087SNC' => Array
(
    'ComputerName' => 'STU-CZC1087SNC',
    'time_in_days' => 0,
    'room' => '4Q08'
),

'STU-CZC02501QT' => Array
(
    'ComputerName' => 'STU-CZC02501QT',
    'time_in_days' => 12,
    'room' => '2R017'
),
'STU-CZC02501QF' => Array
(
    'ComputerName' => 'STU-CZC02501QT',
    'time_in_days' => 12,
    'room' => '2R017'
)    
];


$myarray = array();
foreach($computerarray as $key => $val){
    $myarray[] = $val['time_in_days'];
}

echo "<pre>";
$myarray = array_count_values($myarray);
print_r($myarray);
$total = null; 
foreach ($members as $owner): 
    if($owner['circle_id'] == $c['id']): // or if($owner['circle_id'] == 1):
        $total = $total + 1;
    endif;
endforeach;
echo $total;
$my_arr = Array();
array_walk($arr, function($v) use(&$my_arr) {$my_arr[] = $v['time_in_days'];});
$time_freq = array_count_values($my_arr);
var_dump($time_freq);
/**
  OUTPUT
**/
array
  0 => int 1
  12 => int 2
$computerarray = [
    'STU-CZC1087SNC' => ['ComputerName' => 'STU-CZC1087SNC','time_in_days' => 0,'room' => '4Q08'],
    'STU-CZC02501QT' => ['ComputerName' => 'STU-CZC02501QT','time_in_days' => 12,'room' => '2R017'],
    'STU-CZC02501QF' => ['ComputerName' => 'STU-CZC02501QT','time_in_days' => 12,'room' => '2R017']    
];

var_export(array_count_values(array_column($computerarray,'time_in_days')));
array (
  0 => 1,
  12 => 2,
)