PHP-如果数组长度相同则合并数组

时间:2019-01-24 14:07:30

标签: php arrays

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

{
    "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"
    }
  ]
}

我正在尝试将三个数组container_idout_refin_ref2动态合并为一个这样的关联数组:

  {
     "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) {
       //???
  }

编辑 如果不可能,则新数组不一定需要使用相同的键。

3 个答案:

答案 0 :(得分:3)

您最好的选择是跳过“ 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);

https://3v4l.org/QKq4H


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

$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"
  }
}

https://3v4l.org/OkcXT

答案 1 :(得分:0)

尝试这样的事情

$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_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"
  }
}

https://3v4l.org/vpqrI

答案 2 :(得分:0)

为什么不能像这样构造数组,这对您遍历traversing an array in phphttps://www.tutorialspoint.com/php/php_arrays.htm的链接很有帮助

{
     "array_one": {
             "key_0": {
                    0 : "NYKU3922051",
                    1 : "CI84621",
                    2 : "555-1106260-024"
              }
     },
     "array_two": {
             "key_0": {
                 0 : "LACU3922051",
                 1 : "DI1000",
                 2 : "898-1106260-024"        
            }
  }