Php 组合两个数组两个一并设置关键点

Php 组合两个数组两个一并设置关键点,php,arrays,Php,Arrays,我已经为此奋斗了很长一段时间。我有两个数组,需要合并 这是我的意见: { "array_one": { "mrnreference": [ { "key_0": "18DK00310020B11A84" }, { "key_0": "18DK00310020B11B40" } ] },

我已经为此奋斗了很长一段时间。我有两个数组,需要合并

这是我的意见:

{
    "array_one": {
        "mrnreference": [
            {
              "key_0": "18DK00310020B11A84"
            },
            {
              "key_0": "18DK00310020B11B40"
            }
          ]
    },
    "array_two": {
        "shipperreference": [
            {
              "key_0": "1861575"
            },
            {
              "key_0": "1861549"
            }
          ]
    }
}
现在的结构是,每个数组中的每个项都彼此跟随。因此,结果应该是:

{
  "result": [
    {
       "mrn"     : "18DK00310020B11A84",
       "shipper" : "1861575"
    },
    {
       "mrn"     : "18DK00310020B11B40",
       "shipper" : "1861549"
    }
  ]
}
然而,我根本不知道如何做到这一点

我已尝试合并两个原始阵列:

//Input
$array_one = $request->array_one;
$array_two = $request->array_two;

//Merge the two received arrays
$final = array_merge_recursive($array_one, $array_two);
但是,这只是删除了
array\u one
array\u two
,但该数组仍然被拆分

如何组合上述数组,使其具有以下格式:

{
     "mrn"     : "18DK00310020B11B40",
     "shipper" : "1861549"
}

您可以使用一些自定义代码执行此操作:

$array_one = $request->array_one;
$array_two = $request->array_two;

$final = array_map(function ($value, $key) use ($array_two) {
    foreach ($value as $k => $v) {
        return [
            "mrn" => $v,
            "shipper" => array_get($array_two, "shipperreference.$key.$k")
        ];
    }
}, array_get($array_one, 'mrnreference'), array_keys(array_get($array_one, 'mrnreference')));

一个非常快速的解决方案就是迭代for循环

for($i = 0; $i < count($array_one); $i++){
    $final[$i]["mrn"] = $array_one["mrnreference"][$i]; // Mrn key equals array one value
    $final[$i]["shipping"] = $array_two["shipperreference"][$i]; // Shipping key equals array two value
}
for($i=0;$i

但是,这有一个小警告,即如果$array_one和$array_two的大小不同,则可能会导致错误

首先,可以使用数组映射来获取值,然后在简单for循环中可以将它们组合起来。请注意,mrnreference和shipperreference的大小必须相同,否则会弹出通知

$json = '
{
    "array_one": {
        "mrnreference": [
            {
              "key_0": "18DK00310020B11A84"
            },
            {
              "key_0": "18DK00310020B11B40"
            }
          ]
    },
    "array_two": {
        "shipperreference": [
            {
              "key_0": "1861575"
            },
            {
              "key_0": "1861549"
            }
          ]
    }
}
';
$arr = json_decode($json, true);
$ref = array_map(function($e){return $e['key_0'];}, $arr['array_one']['mrnreference']);
$ship = array_map(function($e){return $e['key_0'];}, $arr['array_two']['shipperreference']);



$output = array();

for ($i = 0, $cnt = count($ref); $i < $cnt ; ++$i) {
  $output[] = [
     'mrn' => $ref[$i],
     'shipper' => $ship[$i],
  ];
}


echo json_encode(['result' => $output]);
$json=”
{
“数组_one”:{
“mrn参考”:[
{
“0号键”:“18DK00310020B11A84”
},
{
“0号键”:“18DK00310020B11B40”
}
]
},
“数组二”:{
“shipperreference”:[
{
“0号键”:“1861575”
},
{
“0号键”:“1861549”
}
]
}
}
';
$arr=json_decode($json,true);
$ref=array_-map(函数($e){return$e['key_0'];},$arr['array_-one']['mrnreference']);
$ship=array_-map(函数($e){return$e['key_0'];},$arr['array_-two']['shipperference']);
$output=array();
对于($i=0,$cnt=count($ref);$i<$cnt;++$i){
$output[]=[
“mrn”=>$ref[$i],
“发货人”=>$ship[$i],
];
}
echo json_encode(['result'=>$output]);

该特定输出的规则是什么?看起来好像要删除第一个?我想合并每个数组中的每个“值”。因此,它应该迭代两个数组,取两个数组的第一个值,并将它们组合到一个未定义的变量:
$data
这会在此行给出错误
未定义的偏移量:0“
:`$final[$i]['mrn']=$array\u one[$i][1]`