PHP如何从指定值开始循环复用小数组填充定长目标数组
循环复用源数组生成指定长度定序数组
核心需求
- 基于已有源数组
$list_order_id,生成元素总数由$vacancies定义的结果数组 - 源数组长度不足时,循环复用源数组元素填充到目标长度
- 结果数组的起始元素,必须是预定义值
$last_id在源数组中紧邻的下一个值
示例参数与预期输出
给定初始代码:
$vacancies = 13; $list_order_id = [1, 5, 6, 9, 10]; $last_id = 6; // 对应起始值为9 $arrayOrder = []; for ($i = 0; $i < $vacancies; $i++) { // 待实现逻辑 }
预期输出结果:
[9, 10, 1, 5, 6, 9, 10, 1, 5, 6, 9, 10, 1]
实现方案
核心逻辑是先定位起始取数位置,再通过取模运算自动处理循环复用的逻辑,不需要手动拼接旋转数组,代码简洁且适配任意长度的源数组和填充数量:
$vacancies = 13; $list_order_id = [1, 5, 6, 9, 10]; $last_id = 6; $arrayOrder = []; // 查找$last_id在源数组中的索引 $startPos = array_search($last_id, $list_order_id); // 起始取数偏移为索引+1 $offset = $startPos + 1; $sourceLen = count($list_order_id); for ($i = 0; $i < $vacancies; $i++) { // 取模运算自动处理越界后回到数组头部的循环逻辑 $currentPos = ($offset + $i) % $sourceLen; $arrayOrder[] = $list_order_id[$currentPos]; }
说明:如果$last_id是源数组的最后一个元素,取模运算会自动将取数位置定位到数组第一个元素,完全符合循环复用的要求。
内容的提问来源于stack exchange,提问作者Anderson Mora
相关产品推荐
相关产品推荐

