php - array_count_values():只能计算字符串和整数值
问题描述
我想找到一个数组的均值、中位数和众数。我可以找到平均值和中位数,但是当我运行程序时,我得到了
警告:array_count_values():只能计算 STRING 和 INTEGER 值!在第 40 行的 C:\AppServ\www\tez\tez2.php 中“错误预测模式。
我搜索但无法修复它。有没有人可以帮助我?
我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Tez Deneme</title>
</head>
<body>
</body>
</html>
<?php
echo "Welcome to my project".'<br>'.'<br>';
$arr=array(1100,3150,4400,4400,5170,7450,7450,7450,8230 );
for($i=0; $i<=8; $i++)
{
if ($arr[$i]<100) {
$arr[$i]=$arr[$i];
}else{
$arr[$i]=$arr[$i]/1000;
$arr1[$i]=$arr[$i];
}
}
function calculate($arr, $output){
switch($output){
case 'mean':
$count = count($arr)+1;
$sum = array_sum($arr);
$total = $sum / $count;
break;
case 'median':
rsort($arr);
$middle = (count($arr) / 2)+1;
$total = $arr[$middle-1];
break;
case 'mode':
$v = array_count_values($arr);
arsort($v);
foreach($v as $k => $v){$total = $k; break;}
break;
}
return $total;
}
function sd_square($x, $total) {
return pow($x - $mean,2);
}
function sd($arr) {
return sqrt(array_sum(array_map("sd_square", $arr, array_fill(0,count($arr), (array_sum($arr) / count($arr)) ) ) ) / (count($arr)-1) );
}
if (isset($_POST['select'])) {
someFunction();
}
echo ' '.'<br>';
echo "Values: ";
echo json_encode($arr).'<br>';
echo 'Mean: '.calculate($arr, 'mean').'<br>';
echo 'Median: '.calculate($arr, 'median').'<br>';
echo 'Mode: '.calculate($arr, 'mode').'<br>';
echo "Standart Derivation: ".sd($arr);
?>
解决方案
在您的代码中
$arr[$i]=$arr[$i]/1000;
$arr1[$i]=$arr[$i];
你$arr1
是一组花车:
Array
(
[0] => 1.1
[1] => 3.15
[2] => 4.4
[3] => 4.4
[4] => 5.17
[5] => 7.45
[6] => 7.45
[7] => 7.45
[8] => 8.23
)
因此Can only count STRING and INTEGER values
.
您可以将其舍入或执行其他操作,例如将其转换为字符串等...
$arr[$i]=$arr[$i]/1000;
$arr1[$i]=(string)$arr[$i];
还
function sd_square($x, $total) { return pow($x - $mean,2); }
var$mean
在这里未定义。
进行这些更改:
<?php
echo "Welcome to my project".'<br>'.'<br>';
$arr=array(1100,3150,4400,4400,5170,7450,7450,7450,8230 );
$arr1=[]; //<--- define this if all are < 100 its undefined
for($i=0; $i<=8; $i++){
if ($arr[$i]<100) { //<-- clean up formatting.
$arr[$i]=$arr[$i];
}else{
$arr[$i]=$arr[$i]/1000;
$arr1[$i]=(string)$arr[$i]; //<-- cast to string
}
}
function calculate($arr, $output){
switch($output){
case 'mean':
$count = count($arr)+1;
$sum = array_sum($arr);
$total = $sum / $count;
break;
case 'median':
rsort($arr);
$middle = (count($arr) / 2)+1;
$total = $arr[$middle-1];
break;
case 'mode':
$v = array_count_values($arr);
arsort($v);
foreach($v as $k => $v){$total = $k; break;}
break;
}
return $total;
}
function sd_square($x, $total) { return pow($x - $total,2); } //<--changed to $total
function sd($arr) {
return sqrt(array_sum(array_map("sd_square", $arr, array_fill(0,count($arr), (array_sum($arr) / count($arr)) ) ) ) / (count($arr)-1) );
}
if (isset($_POST['select'])) {
someFunction();
}
echo ' '.'<br>';
echo "Values: ";
echo json_encode($arr).'<br>';
echo 'Mean: '.calculate($arr, 'mean').'<br>';
echo 'Median: '.calculate($arr, 'median').'<br>';
echo 'Mode: '.calculate($arr1, 'mode').'<br>';
echo "Standart Derivation: ".sd($arr);
输出
Welcome to my project
Values: [1.1,3.15,4.4,4.4,5.17,7.45,7.45,7.45,8.23]
Mean: 4.88
Median: 5.17
Mode: 7.45
Standart Derivation: 2.4035743059961
推荐阅读
- excel - 跨工作簿共享 VBA 模块
- javascript - Codemirror 中不可见的部分文本
- python - 使用 VBA 执行带有命令行参数的 python 代码
- graphql - 禁用 apollo rest 参数 camelCase 转换
- php - 使用 file_get_contents() 时 Insagram API 响应缓慢
- sql - 优化 SQL 查询获取用户信息的最后修改日期
- python - 导入 ibm_db 失败并出现 ModuleNotFoundError:没有名为“ibm_db”的模块
- laravel-5 - 在laravel 5.6中提交时找不到页面
- javascript - 如何在 URL 哈希修改时触发 Enter 按键事件?
- internal-link - 更改 Opencart 2.2.0.0。从 http 到 https 的内部菜单链接