PHP-将相同长度的数组合并为关联数组

PHP-将相同长度的数组合并为关联数组,php,arrays,Php,Arrays,我正在尝试动态合并多个阵列。考虑以下三种不同的阵列输入: { "container_id": [ { "key_0": "NYKU3922051" }, { "key_0": "LACU3922051" } ], "out_ref": [ { "key_0": "CI84621" }, { "key_0": "DI1000" } ], "in_ref2":

我正在尝试动态合并多个阵列。考虑以下三种不同的阵列输入:

{
    "container_id": [
    {
      "key_0": "NYKU3922051"
    },
    {
      "key_0": "LACU3922051"
    }
    ],
  "out_ref": [
    {
      "key_0": "CI84621"
    },
    {
      "key_0": "DI1000"
    }
  ],
  "in_ref2": [
    {
      "key_0": "555-1106260-024"
    },
    {
      "key_0": "898-1106260-024"
    }
  ]
}
我正在尝试将以上三个数组动态合并为一个关联数组,如下所示:

  {
     "array_one": {
         "key_0": "NYKU3922051",
         "key_0": "CI84621",
         "key_0": "555-1106260-024"
     },
     "array_two": {
         "key_0": "LACU3922051",
         "key_0": "DI1000",
         "key_0": "898-1106260-024"        
     }
  }
我们在上面看到的是,每个数组的第一项合并到一个新数组中

我不太清楚该从哪里开始,因为我真的不知道该从哪里开始

这是我的PHP:

  $arrays = $request->all();

  $newArray = [];
  foreach ($arrays as $key => $value) {
       //???
  }
编辑
如果不可能,新数组不一定需要使用相同的键

您最好的选择是跳过“key_0”并得到如下结果:

array(2) {
  ["array_one"]=>
  array(3) {
    [0]=>
    string(11) "NYKU3922051"
    [1]=>
    string(7) "CI84621"
    [2]=>
    string(15) "555-1106260-024"
  }
  ["array_two"]=>
  array(3) {
    [0]=>
    string(11) "LACU3922051"
    [1]=>
    string(6) "DI1000"
    [2]=>
    string(15) "898-1106260-024"
  }
}
通过使用此代码,循环并将值分隔到两个数组

$arr = json_decode($str,true);

foreach($arr as $sub){
    $new["array_one"][] = $sub[0]["key_0"];
    $new["array_two"][] = $sub[1]["key_0"];
}

var_dump($new);


可处理任意数量子阵列的动态版本。
我添加了一个计数器,它可以向上计数并跟踪将值放入哪个数组

$i = 1;
foreach($arr as $sub){
    foreach($sub as $val){
        $new["array_" . $i][] = $val["key_0"];
        $i++;
    }
    $i = 1;
}

var_dump($new);
结果:

array(3) {
  ["array_1"]=>
  array(3) {
    [0]=>
    string(11) "NYKU3922051"
    [1]=>
    string(7) "CI84621"
    [2]=>
    string(15) "555-1106260-024"
  }
  ["array_2"]=>
  array(3) {
    [0]=>
    string(11) "LACU3922051"
    [1]=>
    string(6) "DI1000"
    [2]=>
    string(15) "898-1106260-024"
  }
  ["array_3"]=>
  array(3) {
    [0]=>
    string(9) "something"
    [1]=>
    string(4) "else"
    [2]=>
    string(4) "here"
  }
}

试试这样的方法

$arrays = $request->all();
$result = [];
foreach ($arrays as $array) {
    foreach ($array as $key_index => $keyObject) {
        if(!isset($result['array'.$key_index])) {
            $result['array'.$key_index] = ['key_0' => $keyObject['key_0']];
        } else {
            $result['array'.$key_index]['key_'.count($result['array'.$key_index])] = $keyObject['key_0'];
        }
    }
}
部件
$keyObject['key\u 0']
可以更改为更具动态性。仅使用一个元素获取关联数组中的值的方法

你会得到这样的结果

array(2) {
  ["array0"]=>
  array(3) {
    ["key_0"]=>
    string(11) "NYKU3922051"
    ["key_1"]=>
    string(7) "CI84621"
    ["key_2"]=>
    string(15) "555-1106260-024"
  }
  ["array1"]=>
  array(3) {
    ["key_0"]=>
    string(11) "LACU3922051"
    ["key_1"]=>
    string(6) "DI1000"
    ["key_2"]=>
    string(15) "898-1106260-024"
  }
}

为什么不能这样构造数组,这是一个有助于数组遍历和


@Yoshi-好的,他们不一定需要使用键
键0
。它也可以是:
键0
键1
键2
键不能重复,只能是值be@oliverbj所以你可以用数字索引数组而不是关联数组?但是如果有“数组三”和四呢?在本例中,有两个数组,因为每个数组都给出了两个值。但如果它们有三个或四个值,那么我需要动态添加更多值arrays@oliverbj我添加了一个动态版本!动态版本是完美的-它解决了我的问题!我不控制输入数组。真的不确定这是否是一个答案?@oliverbj在这种情况下,您的预期输出是不可能的,因为在PHP中数组键必须是唯一的。正如所说的,我不关心键是否具有动态名称,如“key_0”、“key_1”等@oliverbj那么为什么您需要关联数组中的键,只需忽略它们并使用数字数组即可避免值覆盖
{
     "array_one": {
             "key_0": {
                    0 : "NYKU3922051",
                    1 : "CI84621",
                    2 : "555-1106260-024"
              }
     },
     "array_two": {
             "key_0": {
                 0 : "LACU3922051",
                 1 : "DI1000",
                 2 : "898-1106260-024"        
            }
  }