如何按1:3比例合并两个数组?附PHP业务场景代码
按1:3比例合并两个PHP数组的实现方案
嘿,我来帮你搞定这个数组合并的需求!根据你给出的示例,我们需要实现一个逻辑:每取第一个数组的1个元素,就紧接着从第二个数组取3个元素,直到其中一个数组的元素耗尽(如果第二个数组剩下的元素不足3个,就把剩下的都加上;如果第二个数组空了,就停止处理第一个数组的剩余元素)。
实现思路
核心逻辑很简单:
- 遍历第一个数组的每个元素
- 每次先将当前第一个数组的元素加入结果数组
- 然后从第二个数组中取出最多3个元素追加到结果数组,同时跟踪第二个数组的当前位置
- 当第二个数组没有剩余元素时,立即停止遍历第一个数组
完整函数实现
function mergeArraysOneToThree($arr1, $arr2) { $merged = []; $arr2Length = count($arr2); $currentArr2Index = 0; foreach ($arr1 as $item) { // 如果第二个数组已经没有元素了,停止后续处理 if ($currentArr2Index >= $arr2Length) { break; } // 添加第一个数组的当前元素 $merged[] = $item; // 从第二个数组取最多3个元素 for ($i = 0; $i < 3; $i++) { if ($currentArr2Index >= $arr2Length) { break; } $merged[] = $arr2[$currentArr2Index]; $currentArr2Index++; } } return $merged; }
测试示例数据
用你给出的测试数组验证一下:
$arr1 = [100, 200, 300, 400, 500]; $arr2 = [111, 112, 113, 114, 115, 116, 117, 118, 119, 120]; $mergedResult = mergeArraysOneToThree($arr1, $arr2); print_r($mergedResult);
执行后会输出你期望的结果:
Array ( [0] => 100 [1] => 111 [2] => 112 [3] => 113 [4] => 200 [5] => 114 [6] => 115 [7] => 116 [8] => 300 [9] => 117 [10] => 118 [11] => 119 [12] => 400 [13] => 120 )
结合你的数据库代码使用
你给出的代码是从数据库获取第一个数组的逻辑,我们可以把它和合并函数结合起来。假设第二个数组也是从数据库查询得到的,完整代码如下:
// 获取第一个数组(你的原有代码) $pervo = []; $sql = "SELECT * FROM `zayvki` WHERE `prioretet`='2' AND `status`='1' AND `let`='2' ORDER BY `dataZayvki` ASC"; $result = mysql_query($sql); while ($itog = mysql_fetch_array($result, MYSQL_ASSOC)) { // 替换成你实际需要存入数组的字段,比如`id`、`title`等 $pervo[] = $itog['id']; } // 获取第二个数组(示例,根据你的实际需求修改查询) $vtoro = []; $sql2 = "SELECT * FROM `your_second_table` WHERE your_condition_here"; $result2 = mysql_query($sql2); while ($itog2 = mysql_fetch_array($result2, MYSQL_ASSOC)) { $vtoro[] = $itog2['target_field']; // 替换成你需要的字段 } // 调用合并函数得到最终数组 $finalMergedArray = mergeArraysOneToThree($pervo, $vtoro); // 可以打印查看结果或者用于后续业务逻辑 print_r($finalMergedArray);
小提示
- 如果你希望即使第二个数组空了,也要把第一个数组剩余的元素全部加入结果,可以去掉
foreach循环里的break语句。 - 另外,
mysql_*系列函数已经被PHP废弃了,建议你改用mysqli_*或者PDO来操作数据库,这样更安全也更符合现代PHP的规范。
内容的提问来源于stack exchange,提问作者Maksim Morozov
相关产品推荐
相关产品推荐

