PHP一维数组匹配多维数组,补全24小时零值元素问题
补全24小时current_play数组的PHP实现方案
我来帮你搞定这个补全小时数组的需求,先看看你现有代码里的问题,再给出正确的实现逻辑和代码。
现有代码的问题分析
你尝试的代码里有几个明显的问题导致无法正常工作:
- 变量未定义:
$v这个变量在代码里没有声明和赋值,直接使用会报错 - 字段名不匹配:原结果数组里的字段是
whours,但你代码里写的是watch_hour;目标字段是current_play,你却用了cplay - 逻辑错误:没有正确遍历每个结果条目里的
current_play元素,而是直接循环整个$result,导致无法准确匹配小时
正确的实现思路
要实现补全24小时的需求,咱们可以按以下步骤来:
- 遍历
$result中的每个条目(支持多个球队的情况) - 将当前条目的
current_play转换为以whours为键的关联数组,这样可以快速判断某个小时是否存在 - 遍历
$hoursArray的每个小时,检查是否在关联数组中:- 如果存在,直接使用原有的
value值 - 如果不存在,创建一个
value为0的元素
- 如果存在,直接使用原有的
- 最后把补全后的数组按小时顺序排列(保证从0到23的顺序)
- 替换原条目里的
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
相关产品推荐
相关产品推荐

