在某个位置展平另一个数组中的php数组
我有一个返回如下数组的函数在某个位置展平另一个数组中的php数组,php,arrays,Php,Arrays,我有一个返回如下数组的函数 Array ( [0] => Array ( [name] => Percent [attributes] => Array ( [Percent] => 50 ) ) [1] => Array ( [name] => Percent [attributes] =&
Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
[2] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
我需要像这样将上面的每个元素添加到另一个数组中
Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
[2] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
我需要的是第一个数组元素,它们插入到第二个数组的同一个级别,中间在第二个数组的第一个和第二个元素之间。
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[2] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
[3] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
问题是,如果我只是将第一个数组原样添加到中间(使用它自己的变量),它会这样添加它
Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
Array
(
[0] => Array
(
[name] => Name
[value] => Johan
)
[1] => Array
(
[0] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
[1] => Array
(
[name] => Percent
[attributes] => Array
(
[Percent] => 50
)
)
)
[2] => Array
(
[name] => Address
[value] => Mayfair Lane
)
)
我已经看过<代码> AARYAY合并< /COD>但当然,我不能指定第二个数组元素在我需要的中间走。
你需要AARYAYSPLICE(),例如:
阵列拼接($second,1,0,$first) 您需要阵列拼接(),例如:阵列拼接($second,1,0,$first) 您不需要执行循环。把他们一分为二。合并第一部分、要插入的中间部分和第二部分
$arr1 = array(
array(
'name' => 'Percent',
'attributes' => array('Percent'=>50)
),
array(
'name' => 'Percent',
'attributes' => array('Percent'=>50)
)
);
$arr2 = array(
array(
'name'=>'Name',
'value'=>'Johan'
),
array(
'name'=>'Address',
'value'=>'Mayfair Lane'
)
);
$mid = count($arr2)/2;
$chunks = array_chunk($arr2, $mid);
$merged = array_merge($chunks[0], $arr1, $chunks[1]);
var_dump($merged);
结果
array(4) {
[0]=>
array(2) {
["name"]=>
string(4) "Name"
["value"]=>
string(5) "Johan"
}
[1]=>
array(2) {
["name"]=>
string(7) "Percent"
["attributes"]=>
array(1) {
["Percent"]=>
int(50)
}
}
[2]=>
array(2) {
["name"]=>
string(7) "Percent"
["attributes"]=>
array(1) {
["Percent"]=>
int(50)
}
}
[3]=>
array(2) {
["name"]=>
string(7) "Address"
["value"]=>
string(12) "Mayfair Lane"
}
}
您不需要执行循环。把他们一分为二。合并第一部分、要插入的中间部分和第二部分
$arr1 = array(
array(
'name' => 'Percent',
'attributes' => array('Percent'=>50)
),
array(
'name' => 'Percent',
'attributes' => array('Percent'=>50)
)
);
$arr2 = array(
array(
'name'=>'Name',
'value'=>'Johan'
),
array(
'name'=>'Address',
'value'=>'Mayfair Lane'
)
);
$mid = count($arr2)/2;
$chunks = array_chunk($arr2, $mid);
$merged = array_merge($chunks[0], $arr1, $chunks[1]);
var_dump($merged);
结果
array(4) {
[0]=>
array(2) {
["name"]=>
string(4) "Name"
["value"]=>
string(5) "Johan"
}
[1]=>
array(2) {
["name"]=>
string(7) "Percent"
["attributes"]=>
array(1) {
["Percent"]=>
int(50)
}
}
[2]=>
array(2) {
["name"]=>
string(7) "Percent"
["attributes"]=>
array(1) {
["Percent"]=>
int(50)
}
}
[3]=>
array(2) {
["name"]=>
string(7) "Address"
["value"]=>
string(12) "Mayfair Lane"
}
}
我可以用foreach loopyeh@Dragon foreach来完成,但我不确定这是否是最有效的。你会在那里使用
array\u splice
吗?是的,你也可以发布它。所以我们可以看到你的foreach算法中的问题。@yoyoma我可以问你,你为什么需要它吗?这个问题看起来真的很不合理和奇怪,除了面试或培训问题。你在开玩笑吗@Axalix?这是一个合法的商业问题,我可以用foreach loopyeh@Dragon foreach解决,但我不确定这是否是最有效的。你会在那里使用array\u splice
吗?是的,你也可以发布它。所以我们可以看到你的foreach算法中的问题。@yoyoma我可以问你,你为什么需要它吗?这个问题看起来真的很不合理和奇怪,除了面试或培训问题。你在开玩笑吗@Axalix?这是一个合法的商业问题,我已经考虑过了,但它会变得混乱,这取决于你需要添加多少内部元素,位置参数需要计数器,而且不确定它是否是最干净的解决方案?我不确定有什么比单次函数调用更干净。我的示例将把$first到$second的所有元素放在位置1,即在已经在$second中的第一个元素之后。这些要素将被置于同一“级别”。有关数组_splice()的详细信息,请参阅。根据“middle”的定义,您可以相应地更新第二个参数,例如,array\u splice($second,count($second)/2,0,$first)代码>是的,我知道你在说什么,我的意思是不干净的事实是,如果内部数组有5个元素,10个元素,50个元素呢?我需要foreach循环中的一个计数器来跟踪该位置参数。不是说它不正确,只是寻找最好的解决方案,你的问题是:“问题是我需要第一个数组元素插入到第二个数组的同一个级别,中间,在第二个数组的第一个和第二个元素之间。”这就是我的答案中的代码。内部数组中的项数(即$first)无关紧要,无需循环即可满足此要求。可能你想要的东西与你在问题中提出的不同,但我恐怕无法理解你的想法:)@yoyoma建议的决定并不取决于你嵌入的数组中元素的数量。试试看。“1”表示“跳过第一个元素”和“0”-“不要接触原始数组”。考虑一下-但它会变得混乱,这取决于需要添加多少内部元素-position param需要计数器,而且不确定它是否是最干净的解决方案?我不确定有什么比单个函数调用更干净。我的示例将把$first到$second的所有元素放在位置1,即在已经在$second中的第一个元素之后。这些要素将被置于同一“级别”。有关数组_splice()的详细信息,请参阅。根据“middle”的定义,您可以相应地更新第二个参数,例如,array\u splice($second,count($second)/2,0,$first)代码>是的,我知道你在说什么,我的意思是不干净的事实是,如果内部数组有5个元素,10个元素,50个元素呢?我需要foreach循环中的一个计数器来跟踪该位置参数。不是说它不正确,只是寻找最好的解决方案,你的问题是:“问题是我需要第一个数组元素插入到第二个数组的同一个级别,中间,在第二个数组的第一个和第二个元素之间。”这就是我的答案中的代码。内部数组中的项数(即$first)无关紧要,无需循环即可满足此要求。可能你想要的东西与你在问题中提出的不同,但我恐怕无法理解你的想法:)@yoyoma建议的决定并不取决于你嵌入的数组中元素的数量。试试看。“1”表示“跳过第一个元素”和“0”-“不要接触原始数组”。