高级数组使用模式合并

时间:2014-08-13 06:13:57

标签: php arrays

我需要一些帮助来合并2个数组,但具有如下所示的特定模式。非常感谢逻辑中的任何帮助。

案例:我有2个阵列

$arr1 = ['a','b','c','d','e','f','g','h','i','j']
$arr2 = [1,2,3,4,5,6,7,8]

我想将这些2合并到第3个(新)数组中,但使用以下模式: **字母,字母,数字,数字,字母,字母,字母,数字,数字**

所以它有2个字母,2个数字,3个字母,2个数字(然后重复)。例如,如果我将此逻辑应用于上面的示例,我们就会得到

$arr3 = ['a', 'b', 1, 2, 'c', 'd', 'e', 3, 4, 'f', 'g', 5, 6, 'h', 'i', 'j', 7, 8

我希望有人可以帮助我实现这个目标的逻辑/总体方向。

仅供参考,我到目前为止的代码仅涉及合并2个具有交替值的数组:

//Empty array to hold new objects
$newArray = array();

foreach ($arr1 as $a1) {
    if (count($arr1)==0) {
        break;
    }
    array_push($newArray, array_pop($arr1));
    if (count($arr2)!=0) {
        array_push($newArray, array_pop($arr2));
    }
}

编辑:我似乎冒犯了一些用户的请求。我已经修改了问题以询问总体方向,并帮助使用数组逻辑。再次感谢您的回复。

2 个答案:

答案 0 :(得分:1)

我不知道它是否适合,但我会做的是将$arr1减少2然后按3,然后$arr2通常只减去2,然后正常合并它们。像这样:

$arr1 = ['a','b','c','d','e','f','g','h','i','j'];
$arr2 = [1,2,3,4,5,6,7,8];
$i = 0;
$temp1 = array();
while(count($arr1) > 0) {
    // cut two then three
    $num = ($i & 1) ? 3 : 2; 
    $temp1[] = array_splice($arr1, 0, $num);
    $i++;
}

$temp2 = array_chunk($arr2, 2); // cut by twos
$arr3 = array();
foreach($temp1 as $key => $val) {
    // merge and merge
    $arr3 = array_merge($arr3, array_merge($val, $temp2[$key]));
}
echo '<pre>';
print_r($arr3);

答案 1 :(得分:1)

由于你听起来像程序员(而不是寻找快速修复的新手)而你只需要逻辑和方向,你可以这样做

免责声明:这只是为了让您了解如何进行操作,当然可以对其进行优化并减少代码,但这样做有效。此代码不会检查数组中元素的数量是否足以满足您的逻辑,您可以随时添加它们。

<?php
$arr1 = ['a','b','c','d','e','f','g','h','i','j'];
$arr2 = [1,2,3,4,5,6,7,8];

$nextSequence=2;
$counter=0;
$alphabets=array_reverse($arr1);
$numbers=array_reverse($arr2);
while($alphabet=array_pop($alphabets))
{
    if($counter==2 && $nextSequence==2)
    {
        $counter=0;
        $nextSequence=3;
        $result[]=array_pop($numbers);
        $result[]=array_pop($numbers);
    }
    elseif($counter==3 && $nextSequence==3)
    {
        $counter=0;
        $nextSequence=2;
        $result[]=array_pop($numbers);
        $result[]=array_pop($numbers);
    }
    $result[]=$alphabet;
    $counter++;
}
while($number=array_pop($numbers))
{
    $result[]=$number;
}
print_r($result);
?>

<强>结果

Array
(
    [0] => a
    [1] => b
    [2] => 1
    [3] => 2
    [4] => c
    [5] => d
    [6] => e
    [7] => 3
    [8] => 4
    [9] => f
    [10] => g
    [11] => 5
    [12] => 6
    [13] => h
    [14] => i
    [15] => j
    [16] => 7
    [17] => 8
)

<强> Fiddle