如何将2个数组与循环位置合并

时间:2019-11-23 07:57:10

标签: php arrays

我有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);
}

3 个答案:

答案 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
)

Demo on 3v4l.org

请注意,当$arr1是3个元素的倍数时,取决于您要获得的结果,您可能需要更改

$count = ceil(count($arr1) / 3) - 1;

$count = ceil((count($arr1) + 1) / 3) - 1;

答案 1 :(得分:1)

您只需插入$arr2的元素ervey $arr1Demo的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
);