PHP合并子阵列

PHP合并子阵列,php,arrays,Php,Arrays,我有两个这样的数组: $a = array(array('1','2','3'), array('hello','darkness','my')); $b = array(array('4','5','6'), array('old','friend','I')); 现在我要分别合并子阵列: $result = array(array_merge($a[0],$b[0]),array_merge($a[1],$b[1]))); 导致: #vardump($result) array(2) {

我有两个这样的数组:

$a = array(array('1','2','3'), array('hello','darkness','my'));
$b = array(array('4','5','6'), array('old','friend','I'));
现在我要分别合并子阵列:

$result = array(array_merge($a[0],$b[0]),array_merge($a[1],$b[1])));
导致:

#vardump($result)
array(2) {
  [0]=>
  array(6) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
    [4]=>
    string(1) "5"
    [5]=>
    string(1) "6"
  }
  [1]=>
  array(6) {
    [0]=>
    string(5) "hello"
    [1]=>
    string(8) "darkness"
    [2]=>
    string(2) "my"
    [3]=>
    string(3) "old"
    [4]=>
    string(6) "friend"
    [5]=>
    string(1) "I"
  }
}

好吧,这是有效的。。。但是它看起来很笨拙,如果需要合并不同数量的子阵列,这不是一个好的解决方案。这种操作是否有内置功能(或更“可接受”的方式)

只需在每个循环中使用

<?php

$a = array(array('1','2','3'), array('hello','darkness','my'));
$b = array(array('4','5','6'), array('old','friend','I'));
$c = array(array('7','8','9'), array('old','friend','I'));

$defined_vars = get_defined_vars();

$result = [];

foreach ($defined_vars as $key => $arr) {
    if (in_array($key, ['_GET', '_POST', '_COOKIE', '_FILES', '_SESSION'])) continue;

    foreach ($arr as $k => $row) {
        if (!isset($result[$k])) {
            $result[$k] = $row;
        } else {
            foreach ($row as $r) {
                $result[$k][] = $r;
            }
        }
    }
}

echo '<pre>';
print_r($result);


--- result
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
            [7] => 8
            [8] => 9
        )

    [1] => Array
        (
            [0] => hello
            [1] => darkness
            [2] => my
            [3] => old
            [4] => friend
            [5] => I
            [6] => old
            [7] => friend
            [8] => I
        )

)

我(借助@panther的回答)得出了以下结论


假设两个数组的格式都一样,就可以使用Foreach来实现它。@Forbs是的,我也这么认为,但我也不太喜欢循环的外观/循环是php中的生命。哈哈…它们的增长和收缩取决于您需要什么。也许我没有正确地阐明这个问题,但我的意思是如果我添加更多的“子数组”,例如添加另一个类似的
$c=array(array('7','8','9'),array('ve','come','to')@YTZ:啊,好的。然后您需要使用
get\u defined\u vars()
并循环使用它。但正确的解决方案是制作另一个数组来包装这些变量。好吧,酷。我会接受你的答案,我也会发布我自己的答案,在那里我使用了你预先编辑的答案来修复它。这是接近包装数组的第二个正确的解决方案。很高兴帮助你!
$array = [
    array(array('1','2','3'), array('hello','darkness','my')),
    array(array('4','5','6'), array('old','friend','I')),
    array(array('7','8','9'), array('old','friend','I'))
];

$result = [];

foreach ($array as $key => $arr) {
    foreach ($arr as $k => $row) {
        if (!isset($result[$k])) {
            $result[$k] = $row;
        } else {
            foreach ($row as $r) {
                $result[$k][] = $r;
            }
        }
    }
}

echo '<pre>';
print_r($result);
function subarray_merge(...$arrays){
    $result = array();
    foreach ($arrays as $k => $v) {
        if($k === 0) {
            $result = $v;
        }else{
            foreach ($v as $ks => $vs) {
                $result[$ks] = array_merge($result[$ks], $v[$ks]);
            }
        }
    }
    return $result;
}

print_r(subarray_merge($a,$b,$c));