我有2个数组:
$arr1 = array('1', '2', '3', '4', '5', '6', '7');
$arr2 = array('a', 'b', 'c', 'd', 'e');
我想将$arr2
循环到$arr1
中,但是如果$arr1
的长度小于算法所需的长度,则仅根据需要使用$arr2
的元素。 / p>
我想达到这个结果:
$arr2 = array('1', '2', '3', 'a', '4', '5', '6', 'b', '7');
我已经尝试过:
$count = ceil(count($arr1) / 3) - 1;
for ($i = 0; $i < $count; $i++) {
array_splice($arr1, 3, 0, $arr2);
}
答案 0 :(得分:3)
您处于正确的轨道上,但是您需要设置拼接点($i+1)*3
,并且仅拼接$arr2[$i]
值,而不拼接整个数组。另外,您还需要从头开始进行反向操作,因为将值插入数组会导致索引发生更改。
$arr1 = array('1', '2', '3', '4', '5', '6', '7');
$arr2 = array('a', 'b', 'c', 'd', 'e');
$count = ceil(count($arr1) / 3) - 1;
for ($i = $count - 1; $i >= 0; $i--) {
array_splice($arr1, ($i + 1) * 3, 0, $arr2[$i]);
}
print_r($arr1);
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => a
[4] => 4
[5] => 5
[6] => 6
[7] => b
[8] => 7
)
请注意,当$arr1
是3个元素的倍数时,取决于您要获得的结果,您可能需要更改
$count = ceil(count($arr1) / 3) - 1;
到
$count = ceil((count($arr1) + 1) / 3) - 1;
答案 1 :(得分:1)
您只需插入$arr2
的元素ervey $arr1
,Demo的3 element2
$result = [];
foreach($arr1 as $key => $value){
$result[] = $value;
if((0 == ($key + 1) % 3) && isset($arr2[($key + 1)/3-1])){
$result[] = $arr2[($key + 1)/3-1];
}
}
print_r($result);
答案 2 :(得分:0)
在每个第三个索引处,拼接到另一个数组的成员中。注意原始数组的大小会发生变化,因此我们需要在每个接头处相应地调整插入的键。
<?php
for($i=3, $s=0, $c=count($arr1); $i<$c; $i+=3, $s++) {
array_splice($arr1, $i+$s, 0, $arr2[$s]);
}
var_export($arr1);
输出:
array (
0 => '1',
1 => '2',
2 => '3',
3 => 'a',
4 => '4',
5 => '5',
6 => '6',
7 => 'b',
8 => '7',
)
相同,省略循环语句
for(
$i=3, $s=0, $c=count($arr1);
$i<$c;
array_splice($arr1, $i+$s, 0, $arr2[$s++]), $i+=3
);