首页 > 解决方案 > 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);
?>

标签: php

解决方案


在您的代码中

$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

沙盒


推荐阅读