php - 在另一个数组的每个第二个元素之后插入一个数组中的元素(一次一个)(非均匀压缩)

标签 php arrays loops array-merge array-splice

什么是合并两个数组的优雅方法,使得生成的数组包含第一个数组中的两个项目,然后是第二个数组中的一个项目,以这种方式重复?

$array1 = ['A1', 'A2', 'A3', 'A4', 'A5']; // potentially longer
$array2 = ['B1', 'B2', 'B3', 'B4', 'B5']; // potentially longer

期望的结果:

['A1', 'A2', 'B1', 'A3', 'A4', 'B2', 'A5', 'B3', 'B4', 'B5']

我正在尝试使用带有多个计数器的 for 循环来完成它,但我不知道数组长度是多少。我很好奇:有没有更好的方法?

这是我目前正在做的事情的简化版本:

$x = 0, $y = 0;
for ($i = 0; $i < $total_num_blocks; $i++) {
    if ($i % 3) {   // if there's a remainder, it's not an 'every 3rd' item
        $result[$i] = $projects[$x++];
    } else {
        $result[$i] = $posts[$y++];
    }
}

最佳答案

无论 $a 和 $b 数组大小如何,此示例都有效。

<?php 

$a = ['A1', 'A2', 'A3', 'A4', 'A5'];
$b = ['BB1', 'BB2', 'BB3', 'BB4', 'BB5'];

for ($i = 0; $i < count($b); $i++) {
    array_splice($a, ($i+1)*2+$i, 0, $b[$i]);
}

echo "<pre>" . print_r($a, true) . "</pre>";

这个例子的输出是:

Array
(
    [0] => A1
    [1] => A2
    [2] => BB1
    [3] => A3
    [4] => A4
    [5] => BB2
    [6] => A5
    [7] => BB3
    [8] => BB4
    [9] => BB5
)

警告: key 未保留!

这是 PHP 5.4.x 代码,如果您没有,请将 $a 和 $b 变量中的 [] 替换为 array()。

关于php - 在另一个数组的每个第二个元素之后插入一个数组中的元素(一次一个)(非均匀压缩),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520272/

相关文章:

javascript - 尝试理解 if/else 循环与函数的结合

c - 简单的 Rand() 函数

php - 查询结果为 true 而不是 false

python - 使用 numpy unique 计数时避免使用 python for 循环来提高性能

php - 如何在 Windows 上使用 PHP 发送电子邮件?

objective-c - 从数组中检索单独的值

Java – 使用二维数组和构造函数(初学者)

c# - 从C#中的一系列数字中获取最小值和最大值而不进行排序

php - mySQL 查询中的 & 符号会切断剩余值

php - stdClass 属性的类型提示?