繁体   English   中英

在数组中找到最高的数字,并计算出其余的百分比

[英]Find highest number in array and work out percentage of the rest

好的,所以我有一个具有此结构的数组。

[0] => stdClass Object
    (
        [questionID] => 588
        [count] => 2
        [answer] => extremely-likely
    )

[1] => stdClass Object
    (
        [questionID] => 588
        [count] => 2
        [answer] => extremely-unlikely
    )

[2] => stdClass Object
    (
        [questionID] => 588
        [count] => 1
        [answer] => likely
    )

[3] => stdClass Object
    (
        [questionID] => 588
        [count] => 1
        [answer] => neither
    )

[4] => stdClass Object
    (
        [questionID] => 588
        [count] => 1
        [answer] => unsure
    )

好的,所以基本上我首先要从此数组中找到最高的数字(计数)。

因此在上面的示例中为2。

现在保存了该最高数字,我想算出其余数字中2(最高数字)的百分比。

因此,从我上面的数组中,[2]将是最高数字的50%。

现在,到目前为止,我的工作如下所示:

private function getFFT($region){
    $fft = Question::getFFTCount($this->hw->id);

    $numbers = [];
    foreach($fft as $answer){
        $numbers[] = $answer->count;
    }

    $findHighest = array_keys($numbers,max($numbers));

    return $findHighest;
}

现在,当我print_r($ findHighest)我得到以下内容。

Array
(
    [0] => 0
    [1] => 1
) 

有谁知道我怎么能做到这一点?

如果只跟踪最高值,则可以节省自己在$ numbers数组中存储值的成本/内存。

private function getFFT(){
    $fft = Question::getFFTCount($this->hw->id);

    foreach($fft as $answer){
        if (empty($findHighest) || $answer->count > $highest) {
            $highest = $answer->count;
        }
    }

    return $highest;
}

然后,一旦您拥有$ highest的价值,只需将计数除以$ highest。 如果您需要此方法来返回每个百分比的数组而不是最大值的值,则可以执行以下操作:

private function getFFT(){
    $fft = Question::getFFTCount($this->hw->id);

    foreach($fft as $answer) {
        if (empty($findHighest) || $answer->count > $highest) {
            $highest = $answer->count;
        }
    }

    $numnbers = [];
    foreach($fft as $answer) {
        $numbers[] = $answer->count / $highest;
    }


    return $numbers;
}

另外,您可能不需要传递$ region,因为您没有在函数中的任何地方使用它。

private function getFFT($region){
    $fft = Question::getFFTCount($this->hw->id);

    $max=0;
    $count=0;
    foreach($fft as $answer){
        if($answer->count> $max)
        {
             $max=$answer->count;
             $count=1; 
        }
        else if($answer->count== $max) 
               $count++;
    }

    $ans =  $count/count($fft);
    $ans=$ans*100;
    return $ans;
}

我不知道我是否正确理解了您的问题,但这是我想到的:

$numbers = [2, 2, 1, 1, 1];

$countValues = array_count_values($numbers);
$highestNumber = max($numbers);
$frequencyOfHighestNumber = $countValues[$highestNumber];
$percentage = 1 / $frequencyOfHighestNumber;
print $percentage;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM