我正在从MySQL数据库中提取数据,如下所示:

ID Status
1 Green
2 Red
3 Red
4 Green
5 Green
6 Green
7 Green
8 Grey

我想知道,RedGreenGreyhighest consecutive count是什么.

The outcome should be

绿色:4

红色:2

格雷:1.

我试了How to count the consecutive duplicate values in an array?Count Number of Consecutive Occurrence of values in Table,但这不是我需要的.

我不想把发生的每一件事都数一数、总结一遍.我想知道它们中最高的连续计数.

我try 了以下方法,但只在某些情况下有效.

$consecResult = array();
$prev_value = array("value" => null, "amount" => null);
while($row = $result->fetch_assoc())
{
    if ($prev_value['value'] != $row['status']) 
    {
       unset($prev_value);
       $prev_value = array('value' => $row['status'], 'amount' => 0);
       $consecResult[$row['status']] =& $prev_value;
    }

    $prev_value['amount']++;
}

希望这是有道理的!

谢谢!

推荐答案

我已经测试了您共享的两个数组,即

$status[0]['status'] = "Green";
$status[1]['status'] = "Red";
$status[2]['status'] = "Red";
$status[3]['status'] = "Green";
$status[4]['status'] = "Green";
$status[5]['status'] = "Green";
$status[6]['status'] = "Green";
$status[7]['status'] = "Grey";

$status[0]['status'] = "Green";
$status[1]['status'] = "Green";
$status[2]['status'] = "Green";
$status[3]['status'] = "Green";
$status[4]['status'] = "Red";
$status[5]['status'] = "Red";
$status[6]['status'] = "Grey";
$status[7]['status'] = "Red";
$status[8]['status'] = "Grey";
$status[9]['status'] = "Green";

并且我的代码可以按预期运行.

以下是我的代码:

$status = array();
$status[0]['status'] = "Green";
$status[1]['status'] = "Green";
$status[2]['status'] = "Green";
$status[3]['status'] = "Green";
$status[4]['status'] = "Red";
$status[5]['status'] = "Red";
$status[6]['status'] = "Grey";
$status[7]['status'] = "Red";
$status[8]['status'] = "Grey";
$status[9]['status'] = "Green";

$highestCounts = array(
    'Green' => 0,
    'Red' => 0,
    'Grey' => 0
);

$currentCounts = array(
    'Green' => 0,
    'Red' => 0,
    'Grey' => 0
);

$previousStatus = '';

foreach ($status as $item) {
    $currentStatus = $item['status'];

    if ($currentStatus === $previousStatus) {
        $currentCounts[$currentStatus]++;
    } else {
        $currentCounts[$currentStatus] = 1;
    }

    $previousStatus = $currentStatus;

    // Update the highest count if necessary
    if ($currentCounts[$currentStatus] > $highestCounts[$currentStatus]) {
        $highestCounts[$currentStatus] = $currentCounts[$currentStatus];
    }
}

// Print the results
foreach ($highestCounts as $status => $count) {
    echo $status . ': ' . $count . "\n";
}

Php相关问答推荐

PHP Perl正则表达式—URL前面没有等号和可能的单引号或双引号

我的docker—compose lamp stack在软件更新后不工作:Containerconfig错误'''

在PHP中替换数组中的文本并同时使用其他函数

具有重叠捕获组的PHP正则表达式

RediSearch PHP希望我在每次使用时定义所有字段

有没有办法为整个PHP应用程序启用严格类型

如何在PHP中出现弃用警告时触发错误?

使用php创建表格和插入数据

Laravel区分大小写搜索

在个人资料页面上显示个人资料图像

Laravel 10.x在到达控制器之前将查询参数强制转换为正确的类型

调用模型[App\Models\Employee]上未定义的关系[title]

使用 secure 和 httponly 选项删除 php 中的 cookie 值得吗?

添加产品标签以通过 WooCommerce 邮箱通知订购商品

根据所选付款方式启用/禁用 WooCommerce 所需的 checkout 字段

如何通过帖子自定义元数据进行查询

Laravel 路由参数中的 ":" 是什么?

在WooCommerce我的账户单个订单页面中添加订单商品部分和按钮

Woocommerce API 的 PHP Curl 附加参数

WooCommerce 按 ID 限制产品