【问题标题】:PHP Average of subkeys in an arrayPHP 数组中子键的平均值
【发布时间】:2014-08-05 00:24:27
【问题描述】:
Array (
[JohnDoe] => Array (
[id] => 23
[name] => JohnDoe
[logintimes] => 30
)
[JaneDoe] => Array (
[id] => 26
[name] => JaneDoe
[logintimes] => 9
)
[Smith] => Array (
[id] => 35
[name] => Smith
[logintimes] => 9
)
)
如何将登录时间相加(然后找到它们的平均值?)
【问题讨论】:
标签:
php
arrays
associative-array
【解决方案1】:
很容易循环并得到它
$counter = 0;
$total = 0;
foreach($array as $row) {
$counter++;
$total += $row['logintimes'];
}
echo $total / $counter;
【解决方案2】:
您也可以使用array_sum 和array_map 来做到这一点:
$sum = array_sum(array_map(function($item) {
return $item['logintimes'];
}, $your_array));
echo $sum / count ($your_array);
【解决方案3】:
为了完整起见,PHP >= 5.5.0:
$average = array_sum(array_column($array, 'logintimes')) / count($array);
【解决方案4】:
您必须遍历数组,并使用子数组引用来合计 logintimes 值。完成后,您只需将 logintimes 的总数除以数组项的数量即可。
示例:
<?php
$users = array(
"JohnDoe" => array(
"id" => 23,
"name" => "JohnDoe",
"logintimes" => 30
),
"JaneDoe" => array(
"id" => 23,
"name" => "JaneDoe",
"logintimes" => 9
),
"Smith" => array(
"id" => 35,
"name" => "Smith",
"logintimes" => 9
)
);
$count = 0;
$total = 0;
foreach($users as $user => $values) {
$count++;
$total += $values['logintimes'];
}
$average = $total / $count;
echo $average; //Output 16
工作示例:http://codepad.org/uHpJnODv
【解决方案5】:
认为这个解决方案应该更高效(PHP 5.5+):
<?php
$users = array(
"JohnDoe" => array(
"id" => 23,
"name" => "JohnDoe",
"logintimes" => 30
),
"JaneDoe" => array(
"id" => 23,
"name" => "JaneDoe",
"logintimes" => 9
),
"Smith" => array(
"id" => 35,
"name" => "Smith",
"logintimes" => 9
)
);
$count = count($users);
$average = array_column($users , 'logintimes') / $count;
echo $average; //Output 16