0

私はPHPとプログラミングにかなり慣れていないので、このことに問題があります。

全体の状況の目的は、タブ区切りファイルから列を読み取り (既に実行済み)、その中のすべての異なる項目を取得し、それらを個別に数えて、

Column1[item value - label]、Column2[count] を使用してテーブルに配置することです。

列全体を 1 次元配列にしています。ここで、そこにあるすべてのアイテムとその数を一覧表示したいと思います。問題は、10 個以上の異なるアイテムを持つことができるため、次のように手動で (10 個の変数に名前を付けてそれぞれを数える) できないことです。

$arr = array("complete","fail","complete","exit","fail","fail","complete");
function isComplete($value){
    return ($value == "complete") ? true : false;
}

$complete = array_filter($array, 'isComplete');

<tr>
   <td>Complete</td>
   <td><?php echo count($complete)?></td>
</tr>

-- > Complete = 3

値はファイルごとに異なる可能性があるため、各値に対してすべての関数を手動で作成することは避けたいと思います。

$array の項目数は最大 20+k になる可能性があるため、すべて自動化する必要があります。誰かがこれで私を助けることができますか?

4

3 に答える 3

2

配列を調べて、カウントを別の配列に配置するのはどうですか? ( $arrCount)

$arr = array("complete","fail","complete","exit","fail","fail","complete");
$arrCount = Array();

foreach($arr as $value){
    $arrCount[$value] = array_key_exists($value,$arrCount) ? $arrCount[$value]+1 : 1;
    //If this key exists, add 1 to it, else make it equal to 1
}

これにより、キーがさまざまなラベルであり、値がラベルの合計に等しい配列が作成されます。

print_r出力:

配列 ( [完了] => 3 [失敗] => 3 [終了] => 1 )

于 2013-02-27T13:46:31.157 に答える
0

疑似コード:

$arr = array("complete","fail","complete","exit","fail","fail","complete");
$counts = array();
foreach($arr => $key as $value)
{
    if(array_key_exists($value, $counts))
    {
        $counts[$value]++;
    }else{
        $counts[$value] = 1;
    }
}
foreach($counts => $key as $value)
{
    echo '<tr>
   <td>' . $key . '</td>
   <td>' . $value . '</td>
</tr>';
}

リスト内の要素の配列を作成しています。アイテムが存在する場合は、そうでない場合は create を値 1 で増やします。もう一度ループして、各アイテムの合計数をユーザーに表示します。

于 2013-02-27T13:46:35.520 に答える
0

多分私はポイントを逃していますが、通常のループの問題は何ですか? 例えば:

function countByValue($array, $value){
    $count  = 0;
    foreach($array as $val){
        if ($val == $value){
            $count++;
        }
    }
    return $count;
}

そしてそれを呼び出す

$complete = countByValue($arr, 'complete');

それらを一度に数えたい場合は、F4r-20 の回答を使用してください。

于 2013-02-27T13:47:41.260 に答える