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