You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP一维数组匹配多维数组,补全24小时零值元素问题

补全24小时current_play数组的PHP实现方案

我来帮你搞定这个补全小时数组的需求,先看看你现有代码里的问题,再给出正确的实现逻辑和代码。

现有代码的问题分析

你尝试的代码里有几个明显的问题导致无法正常工作:

  • 变量未定义:$v这个变量在代码里没有声明和赋值,直接使用会报错
  • 字段名不匹配:原结果数组里的字段是whours,但你代码里写的是watch_hour;目标字段是current_play,你却用了cplay
  • 逻辑错误:没有正确遍历每个结果条目里的current_play元素,而是直接循环整个$result,导致无法准确匹配小时

正确的实现思路

要实现补全24小时的需求,咱们可以按以下步骤来:

  1. 遍历$result中的每个条目(支持多个球队的情况)
  2. 将当前条目的current_play转换为以whours为键的关联数组,这样可以快速判断某个小时是否存在
  3. 遍历$hoursArray的每个小时,检查是否在关联数组中:
    • 如果存在,直接使用原有的value值
    • 如果不存在,创建一个value为0的元素
  4. 最后把补全后的数组按小时顺序排列(保证从0到23的顺序)
  5. 替换原条目里的current_play为补全后的数组

完整的PHP代码

<?php
// 小时数组
$hoursArray = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']; 

// 原始结果数组
$result = array(
    array(
        "code" => "BA",
        "name" => "BARCA",
        "current_play" => array(
            array(
                "whours" => "20",
                "value" => "6"
            ),
            array(
                "whours" => "5",
                "value" => "6"
            ),
            array(
                "whours" => "6",
                "value" => "6"
            ),
            array(
                "whours" => "8",
                "value" => "6"
            ),
            array(
                "whours" => "9",
                "value" => "6"
            )
       )
   )
);

// 处理每个结果条目
foreach ($result as &$item) {
    // 将current_play转换为以whours为键的关联数组
    $currentPlayMap = [];
    foreach ($item['current_play'] as $play) {
        $currentPlayMap[$play['whours']] = $play['value'];
    }
    
    // 补全24小时的数据
    $completedPlay = [];
    foreach ($hoursArray as $hour) {
        $completedPlay[] = [
            'whours' => $hour,
            'value' => isset($currentPlayMap[$hour]) ? $currentPlayMap[$hour] : '0'
        ];
    }
    
    // 替换原current_play为补全后的数组
    $item['current_play'] = $completedPlay;
}
unset($item); // 解除引用,避免后续修改$result时出现意外

// 打印结果验证
echo "<pre>";
print_r($result);
echo "</pre>";
?>

最终效果

运行这段代码后,$result里的current_play会包含从0到23的所有小时,缺失的小时对应的value会被设为0,并且严格按照小时顺序排列,完全符合你期望的结构。

内容的提问来源于stack exchange,提问作者vrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:03