计算PHP数组中值的出现次数
我已将SQL查询的结果加载到数组中。字段为ComputerName、时间(以天为单位)、房间、键入ComputerName 我想知道每天发生多少次 数组的示例值为:计算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
[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,
)