2016-10-26 8 views
1

真偽の繰り返しを数え、一番大きいものを数えたいと思います。 PHPでこれを行うための事前定義された関数はありますか?これまでのところ、私はこの(isHappy()法)のようにそれを行っている:配列値の反復を数える方法

$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:私はそれを実行したときに

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; 
    } 
} 

だから、私は彼女が幸せであるかどうかの平均値を得ることができますそれはすべきですおそらく、あなたが勝つことができないので、毎回falseを返します。

+0

'array_count_values'? – nogad

+0

毎回falseを返す必要がある場合は、なぜあなたは数えていますか? –

+1

'それはおそらくあなたが勝つことができないので、毎回falseを返すべきです。'女の子は理解できないと言うジョークです@Pamblam – KDOT

答えて

5

あなたはarray_count_valuesをしたい:array_count_valuesは専用の文字列とint型で動作しますので、私は処理のためにintに与えられたbooleanをマッピングしてること

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.

注意。 、

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

値はtrueあるキーを取得し、それを数える:

+0

ニース、これは助けてくれました。 &私はそれについてのドキュメントも読んだ。ありがとう。 +1できます。 – KDOT

+0

うれしいことに、それは確かにバケットデータのための便利な機能です。 – bishop

2

array_sum()タイプはそう単純に(すべてfalseを生み出す)全ての問題を持つすべてのtrueマイナスtrueの合計を比較し、あなたのためjuggles falseのために同じことを行うとの比較:

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

またはその他の可能な組み合わせの数。

関連する問題