将两个数组二合一并设置键

时间:2018-11-28 09:37:37

标签: php arrays

我一直为此苦苦挣扎。我有两个数组,需要组合。

这是我的输入内容

{
    "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_onearray_two,但是该数组仍然被拆分。

如何合并以上数组,因此其格式如下:

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

3 个答案:

答案 0 :(得分:2)

您可以使用一些自定义代码来做到这一点:

$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')));

答案 1 :(得分:1)

对此的一种非常快速的解决方案是仅遍历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
}

但是,如果$ array_one和$ array_two的大小不同,这可能会导致错误。

答案 2 :(得分:0)

首先可以使用array_map获取值,然后在简单的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]);