簡體   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