首页 > 解决方案 > 如何使用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 来映射这个数组。

标签: 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;
    } 
}     

推荐阅读