我想找到数组的均值,中位数和众数。我可以找到平均值和中位数,但是当我运行程序时,我得到了
警告:array_count_values():只能计算STRING和INTEGER 价值观!在C:\ AppServ \ www \ tez \ tez2.php在第40行上“错误查找到 模式。
我搜索了但无法修复。有谁可以帮助我吗?
我的代码:
<!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);
?>
答案 0 :(得分:1)
在您的代码中
$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); }
此处未定义变量$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