php - 数组只替换特定键的值
问题描述
我有两个数组,在 json 中是这样的(标签):
[
{
"dates": "2019-07-01",
"c_job": 0
},
{
"dates": "2019-07-02",
"c_job": 0
},
{
"dates": "2019-07-03",
"c_job": 0
},
{
"dates": "2019-07-04",
"c_job": 0
}
]
以及来自数据库的其他数据(数据):
{
"EXPORT": [
{
"dates": "2019-07-01",
"c_job": 12
},
{
"dates": "2019-07-02",
"c_job": 8
},
{
"dates": "2019-07-04",
"c_job": 11
}
],
"IMPORT": [
{
"dates": "2019-07-03",
"c_job": 11
}
]
}
之后,我尝试使用以下代码进行数组替换以使用标签使数据精度:
foreach($data as $key => $value) {
$datafinal[$key] = array_replace($label,$value);
}
输出是 (datafinal) :
{
"EXPORT": [
{
"dates": "2019-07-01",
"c_job": 12
},
{
"dates": "2019-07-02",
"c_job": 8
},
{
"dates": "2019-07-04",
"c_job": 11
},
{
"dates": "2019-07-04",
"c_job": 0
}
],
"IMPORT": [
{
"dates": "2019-07-03",
"c_job": 11
},
{
"dates": "2019-07-02",
"c_job": 0
},
{
"dates": "2019-07-03",
"c_job": 0
},
{
"dates": "2019-07-04",
"c_job": 0
}
]
}
我想要的是这样的:
{
"EXPORT": [
{
"dates": "2019-07-01",
"c_job": 12
},
{
"dates": "2019-07-02",
"c_job": 8
},
{
"dates": "2019-07-03",
"c_job": 0
},
{
"dates": "2019-07-04",
"c_job": 11
}
],
"IMPORT": [
{
"dates": "2019-07-01",
"c_job": 0
},
{
"dates": "2019-07-02",
"c_job": 0
},
{
"dates": "2019-07-03",
"c_job": 11
},
{
"dates": "2019-07-04",
"c_job": 0
}
]
}
我尝试了数组减少和替换
解决方案
基本上你需要做的是对于每个顶级数组$data
,遍历 0 值数组(我称之为它$blank
)并查看当前$data
数组中是否存在日期。如果是,则复制该值,否则使用空白值:
$datafinal = array();
foreach ($data as $key => $value) {
foreach ($blank as $bkey => $bvalue) {
if (($dkey = array_search($bvalue['dates'], array_column($value, 'dates'))) !== false) {
$datafinal[$key][$bkey] = $value[$dkey];
}
else {
$datafinal[$key][$bkey] = $bvalue;
}
}
}
echo json_encode($datafinal, JSON_PRETTY_PRINT);
输出:
{
"EXPORT": [
{
"dates": "2019-07-01",
"c_job": 12
},
{
"dates": "2019-07-02",
"c_job": 8
},
{
"dates": "2019-07-03",
"c_job": 0
},
{
"dates": "2019-07-04",
"c_job": 11
}
],
"IMPORT": [
{
"dates": "2019-07-01",
"c_job": 0
},
{
"dates": "2019-07-02",
"c_job": 0
},
{
"dates": "2019-07-03",
"c_job": 11
},
{
"dates": "2019-07-04",
"c_job": 0
}
]
}
推荐阅读
- c# - 反序列化有时是 int 值的 json 对象
- javascript - 创建一个简单的计算器函数
- javascript - 将侧边栏注入右侧页面的 Chrome 扩展程序
- curl - 如何在 curl 命令中将 Markdown 文件的内容复制为请求正文
- java - 案例类对象上的Scala groupBy
- android - 在谷歌中自动化测试时的问题
- python - 为什么我的循环布尔值一直被设置回 True?
- git - 使用代理时,Git 克隆适用于 https 但不适用于 SSH
- regex - 如何添加双引号?perl
- vue.js - socket.io-client 导致 ie11 呈现空白