0

我对 PHP 和编程很陌生,所以我在这件事上遇到了麻烦。

整个情况的目的是从制表符分隔的文件中读取一列(已经这样做了),获取其中的所有不同项目,单独计算它们并将它们与

Column1 [item value - label], Column2 [count] 一起放入表中。

我有一维数组中的整列。现在,我想在旁边列出所有项目及其数量。问题是,我可以有超过 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>';
}

我们正在制作列表中元素的数组。如果该项目存在,则增加,否则创建值为 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 回答