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

Php 如何将2个数组与循环位置合并,php,arrays,Php,Arrays,我有两个阵列: $arr1 = array('1', '2', '3', '4', '5', '6', '7'); $arr2 = array('a', 'b', 'c', 'd', 'e'); 我想将$arr2循环到$arr1中,但如果$arr1的长度小于算法要求的长度,则只需根据需要使用尽可能多的$arr2元素 我想达到这个结果: $arr2 = array('1', '2', '3', 'a', '4', '5', '6', 'b', '7'); 我已经试过: $count = cei

我有两个阵列:

$arr1 = array('1', '2', '3', '4', '5', '6', '7');
$arr2 = array('a', 'b', 'c', 'd', 'e');
我想将$arr2循环到$arr1中,但如果$arr1的长度小于算法要求的长度,则只需根据需要使用尽可能多的$arr2元素

我想达到这个结果:

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

您在正确的轨道上,但需要使拼接点为$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
)
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;


您在正确的轨道上,但需要使拼接点为$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
)
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;


您只需插入$arr2的元素,或插入$arr1的元素2


您只需插入$arr2的元素,或插入$arr1的元素2


在每三个索引处,拼接另一个数组的一个成员。请注意,原始阵列的大小发生了变化,因此我们需要在每个拼接处相应地调整插入的关键点

<?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);
同样,省略循环的语句

for(
    $i=3, $s=0, $c=count($arr1);
    $i<$c;
    array_splice($arr1, $i+$s, 0, $arr2[$s++]), $i+=3
);

在每三个索引处,拼接另一个数组的一个成员。请注意,原始阵列的大小发生了变化,因此我们需要在每个拼接处相应地调整插入的关键点

<?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);
同样,省略循环的语句

for(
    $i=3, $s=0, $c=count($arr1);
    $i<$c;
    array_splice($arr1, $i+$s, 0, $arr2[$s++]), $i+=3
);

@别担心,我很高兴能帮上忙。请注意,克里斯的回答也很好,可能会更有效。不用担心,我很高兴能帮上忙。请注意,克里斯的答案也很好,可能更有效。它会打印两次。您的意思可能是$result[]=$arr2[intval$key+1/3-1];它会打印两次。您的意思可能是$result[]=$arr2[intval$key+1/3-1];从索引3开始,绕过if。从索引3开始,绕过if。