php - 如何使用PHP根据键值修改数组列表的数据结构
问题描述
我需要使用PHP根据一些键值修改json数组列表的数据结构。我在下面解释我的代码。
<?php
$output=array(
array(
"first_name"=>"robin",
"last_name"=>"sahoo",
"reg_no"=>12,
"paper_code"=>"BA001"
),array(
"first_name"=>"robin",
"last_name"=>"sahoo",
"reg_no"=>12,
"paper_code"=>"BA002"
),array(
"first_name"=>"Rama",
"last_name"=>"Nayidu",
"reg_no"=>13,
"paper_code"=>"BA001"
)
);
//echo json_encode($output);
$result=array();
foreach ($output as $key => $value) {
if (count($result)==0) {
$result[]=array(
"name"=>$value["first_name"].' '.$value['last_name'],
"reg_no"=>$value['reg_no'],
"paper1"=>$value['paper_code'],
"paper2"=>"",
"paper3"=>"",
"paper4"=>""
);
}
}
输入数组的输出如下所示。
// Output:
[
{
"first_name":"robin",
"last_name":"sahoo",
"reg_no":12,
"paper_code":"BA001"
},
{
"first_name":"robin",
"last_name":"sahoo",
"reg_no":12,
"paper_code":"BA002"
},
{
"first_name":"Rama",
"last_name":"Nayidu",
"reg_no":13,
"paper_code":"BA001"
}
];
以上是我的数组列表。在这里,我需要修改所有行的值,reg_no
如果有多个行包括相同的行,reg_no
那么这些行将与加入两个名称合并,我的预期输出应该如下所示。
预期输出:
[
{
'name':"robin sahoo",
"reg_no":12,
"paper1":"BA001",
"paper2":"BA002",
"paper3":"",
"paper4":""
},
{
'name':"Rama Nayidu",
"reg_no":13,
"paper1":"BA001",
"paper2":"",
"paper3":"",
"paper4":""
}
]
这里paper1,paper2,paper3,paper4
将被连续选择意味着假设相同reg_no=12
的第一行paper_code= BA001
然后它将是paper1=BA001
第二行 paper_code=BA002 然后它将是paper2=BA002
等等。这里我使用 PHP 来映射这个数组。
解决方案
试试下面的,让我知道..
$output=array(array("first_name"=>"robin","last_name"=>"sahoo","reg_no"=>12,"paper_code"=>"BA001"),array("first_name"=>"robin","last_name"=>"sahoo","reg_no"=>12,"paper_code"=>"BA002"),array("first_name"=>"Rama","last_name"=>"Nayidu","reg_no"=>13,"paper_code"=>"BA001"));
//echo json_encode($output);
$result=array();
$temp=array();
if(!empty($output)){
foreach ($output as $key => $value) {
if(isset($temp[$value['reg_no']])){
if(empty($temp[$value['reg_no']]["paper1"]) || $temp[$value['reg_no']]["paper1"] == ""){
$temp[$value['reg_no']]["paper1"] = $value['paper_code'];
}else if(empty($temp[$value['reg_no']]["paper2"]) || $temp[$value['reg_no']]["paper2"] == ""){
$temp[$value['reg_no']]["paper2"] = $value['paper_code'];
}else if(empty($temp[$value['reg_no']]["paper3"]) || $temp[$value['reg_no']]["paper3"] == ""){
$temp[$value['reg_no']]["paper3"] = $value['paper_code'];
}else if(empty($temp[$value['reg_no']]["paper4"]) || $temp[$value['reg_no']]["paper4"] == ""){
$temp[$value['reg_no']]["paper4"] = $value['paper_code'];
}
}else{
$temp[$value['reg_no']] = array("name"=>$value["first_name"].' '.$value['last_name'],"reg_no"=>$value['reg_no'],"paper1"=>$value['paper_code'],"paper2"=>"","paper3"=>"","paper4"=>"");
}
}
}
if(!empty($temp)){
foreach ($temp as $key => $value) {
$result[] = $value;
}
}
推荐阅读
- list - 在 Prolog 中访问括号内的元素
- dependency-injection - 在 azure functions V2 - .net core 中使用 unity.configuration 的方法
- java - 滚动哈希:我的代码因长字符串取模失败
- python - 返回字符串中的所有完整单词,直到给定索引
- java - 为什么我的两个简单的 Spring REST 服务返回两种不同的 JSON 格式,一种是 JSON 对象,另一种是 JSON 字符串?
- sas - 如何在 SAS 中构造 3D 双变量法线密度曲面?
- r - 无法找到唯一值
- rxjs - RxJs动态throttleTime持续时间又名获取滚动开始事件流
- tensorflow - tf.Variables 的维度在一些时期后发生变化
- regex - 用于匹配标签的 javascript 正则表达式