2016-10-26 6 views
1

Я хочу подсчитать повторяемость истинного или ложного и вывода, которое больше всего. Есть ли предопределенная функция для этого в PHP? До сих пор я сделал это так (isHappy() метод):Как подсчитать повторяемость значения массива

class Girl { 
    private $issues = []; 
    public function addIssue($details) { 
     this->issues[] = [$details, false]; 
     return; 
    } 
    public function isHappy() { 
     $true = []; 
     $false = []; 
     foreach($this->issues as $issue) { 
      if($issue[1]) { $true[] = true; } else { $false[] = false; } 
     } 
     // what if its == to one another? do we return happy or sad? 
     return count($true) < count($false) ? false : true; 
    } 
    public function resolveIssue() { 
     for($i = 0; $i <= count($this->issues); $i++) { 
      if(!$this->issues[$i][1]) { 
       $this->issues[$i][1] = true; 
       break; 
      } 
     } 
     return; 
    } 
} 

Так что, когда я бегу, я могу получить среднее, если она счастлива или нет:

$her = new Girl(); 

$her->addIssue('Deleted our messages'); 
$her->addIssue('Over reacted'); 
$her->addIssue('Told her family to pretty much **** off'); 

echo $her->isHappy() ? 'it is all ok:)' : 'she hates u, hang urself.'; 

PS: Это должно вероятно, возвращать false каждый раз, потому что вы не можете победить.

+0

'array_count_values'? – nogad

+0

, если он должен возвращать false каждый раз, то почему вы даже считаете? что именно ваш вопрос для вас, похоже, достиг того, что указано в вашем названии. –

+1

'Он должен, вероятно, возвращать ложь каждый раз, потому что вы не можете победить. 'была шуткой, чтобы сказать, что девушки невозможно понять @Pamblam – KDOT

ответ

5

Вы хотите array_count_values:

function isHappy(array $issues) { 
    $happiness = array_count_values(array_map('intval', $issues)); 
    return $happiness[1] > $happiness[0]; 
} 
print_r(
    isHappy([ true, false, true, true, false ]) 
); 

See it live on 3v4l.org.

Обратите внимание, что array_count_values работает только на строки и междунар, поэтому я отображение данного boolean в int для обработки.

+0

Ницца, это помогло. & Я также прочитал документацию. Благодарю. +1 & отмечен, когда я могу. – KDOT

+0

Приятно, что это помогло, это действительно полезная функция для данных bucketing. – bishop

2

array_sum() типа жонглирует для вас, так просто сравнить сумму всех true со всеми вопросами минус true (что дает все false):

public function isHappy() { 
    return ($true = array_sum($this->issues)) > (count($this->issues) - $true); 
} 

Получить ключи, значения которых true и рассчитывать его, сделать то же самое для false и сравнения:

return count(array_keys($this->issues, true)) > count(array_keys($this->issues, false)); 

или ряд других возможных комбинаций.

Смежные вопросы