PHPのcount関数は、配列内のすべての要素をカウントします。この例では、ブール値を渡しました。結果として、カウントはそれをどう処理するかわからないため、-1を返します。これは有効なカウントではありません。
私のPHPは本当に錆びています(私は長い間使用していません)が、あなたが望むことを達成するための2つの可能な方法があります:
1.関数マップ/リデューススタイルを使用する
<?php
$row[0]->status = 1;
$row[1]->status = 2;
$row[2]->status = 1;
$row[3]->status = 3;
$row[4]->status = 1;
// Count the number of statuses that are equal to 1
echo array_reduce(array_map(function($x) {
return $x->status == 1 ? 1: 0;
}, $row), function($x, $y) {return $x + $y;});
もちろん、$row変数を$this->rowに置き換える必要があります。コードは基本的に2つのステップで機能しています。内側:
array_map(function($x) {
return $x->status == 1 ? 1: 0;
}, $row)
1に等しいすべてのステータスが1になり、それ以外はすべて0になるリストを作成します。したがって、「array(1、0、1、0,1)」の配列があります。コードの外側の部分:
array_reduce( ... , function($x, $y) {return $x + $y;});
新しい配列を最初の引数として取り、配列の最初の2つの値を関数に渡してから、後続の各値と最後の関数呼び出しの結果を渡すことにより、すべてを合計します。その結果、すべての値が合計され、一致する値が適切にカウントされます。
2.単純な手続き型を使用する
<?php
$row[0]->status = 1;
$row[1]->status = 2;
$row[2]->status = 1;
$row[3]->status = 3;
$row[4]->status = 1;
// Do it again, but in a procedural style
$num_1_statuses = 0;
foreach ($row as $r) {
if ($r->status == 1) {
$num_1_statuses++;
}
}
echo $num_1_statuses;
これは本当に簡単なはずです。行のステータスが一致するたびにインクリメントされる変数が含まれているだけです。