我试图通过显示第一个数组中的 4 个第一个元素和第二个数组中的 1 个第一个元素来创建第三个数字数组,依此类推。
例:
A1 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 22, 23, 24, 25 }
A2 {11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }
结果应该是:
A3 { 1, 2, 3, 4, 11, 5, 6, 7, 8, 12, 9, 10, 21, 22, 13, ... }
└───┬────┘ ↑↑ └───┬────┘ ↑↑ └─────┬─────┘ ↑↑
A1 A2 A1 A2 A1 A2
现在我尝试了这段代码,但它没有显示第二个数组中的所有元素。
<?php
$array = array(1, 2, 3, 4, 5,6,7,8,9,10);
$array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);
$temp = 0;
foreach ($array as $key => $item)
{
echo $item;
if(($key+1) % 4 == '0')
{
echo $array2[$temp];
$temp++;
}
}
?>
解释
在这里,我首先将第一个数组分成 4 个元素的部分,第二个数组用 array_chunk()
分块为 1 的部分,如下所示:
//Array one
Array (
Array (
//4 array elements
)
//...
)
//Array two
Array (
Array (
//1 array elements
)
//...
)
然后,您可以使用array_map()
一次遍历两个数组,并使用array_merge()
将两个数组合并在一起。由于两个数组中的元素数量可能不均匀,因此我只需与is_array()
检查我们是否仍然有一个包含要合并的元素的数组,或者我们是否必须使用空数组进行array_merge()
。
所以在array_map()
之后,我们最终得到一个二维数组,每个子数组包含来自第一个数组的 4 个元素和来自第二个数组的 1 个元素,如下所示:
//Array
Array (
Array (
//4 array elements from array one
//1 array elements from array two
)
//...
)
最后,我们可以将call_user_func_array()
与array_merge()
结合使用,将所有元素作为一维数组获取。
法典
<?php
$array = array(1, 2, 3, 4, 5,6,7,8,9,10);
$array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);
$result = call_user_func_array("array_merge", array_map(function($arrayOne, $arrayTwo){
return array_merge(is_array($arrayOne) ? $arrayOne : [], is_array($arrayTwo) ? $arrayTwo : []);
}, array_chunk($array, 4), array_chunk($array2, 1)));
print_r($result);
?>
输出:
Array (
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 11
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] => 12
[10] => 9
[11] => 10
[12] => 13
[13] => 14
[14] => 15
[15] => 16
[16] => 17
[17] => 18
[18] => 19
[19] => 20
)
根据您的代码,循环将在到达第一个数组的末尾($array
)结束。如果第二个数组包含的元素数量超过第一个数组的 1/4,则它不会显示第二个数组的完整元素。
使代码打印每个数组的其余元素
$array = array(1, 2, 3, 4, 5,6,7,8,9,10);
$array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);
$temp = 0;
$length = count($array2);
foreach ($array as $key => $item){
echo $item;
if(($key+1)%4 == '0' && $temp < $length){
echo $array2[$temp];
$temp++;
}
}
// Print remaining elements if there are any
for ($i = $temp; $i < $length; $i++) {
echo $array2[$i];
}
尝试创建第三个数组,并将其他两个数组的每个项目推入其中(使用您的逻辑来确定新项目顺序)
<?php
$array = array(1,2,3,4,5,6,7,8,9,10,21,22,23,24,25);
$array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);
$array3=array();
$temp=0;
foreach ($array as $key => $item)
{
array_push($array3,$item);
if(($key+1)%4=='0')
{
array_push($array3,$array2[$temp]);
$temp++;
}
}
$count=count($array2);
if($temp != $count)
{
for($a=$temp;$a<$count;$a++)
{
array_push($array3,$array2[$a]);
}
}
?>
这为 $array 3 提供了以下内容:
1, 2, 3, 4, 11, 5, 6, 7, 8, 12, 9, 10, 21, 22, 13, 23, 24,25, 14, 15, 16, 17, 18, 19, 20
它都是 array1,以四位数组集的形式,穿插着数组 2 的前 3 个元素,然后是 array2 的其余元素。不出所料。
使用isset
或array_key_exists()
来检查数组索引是否存在并存储新数组
$new = array();
foreach ($array as $key => $item)
{
if(($key+1) % 4 == 0)
{
$new[] = $item;
isset($array2[$temp]) ? $new[] = $array2[$temp] : "";//isset is check array index is exist in array 2
$temp++;
}
else{
$new[] = $item;
}
}