我需要一些帮助来合并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));
}
}
编辑:我似乎冒犯了一些用户的请求。我已经修改了问题以询问总体方向,并帮助使用数组逻辑。再次感谢您的回复。
答案 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 强>