不确定我的标题是否准确地解释了我想要做的事情,但这是我的用例:
我有一个包含 Id 1 = n
的数据库,我们称其为 500 条记录。
我想首先获取 PHP 中的周数 $week = date('W')
所以本周是 48
。
然后我想返回 3 个唯一的 ID,它们总是返回该周相同的 ID。例如。
Week 1 = Id's 1,2,3
Week 2 = Id's 4,5,6
Week 3 = Id's 7,8,9
Week 4 = Id's 10,11,12
Week 5 = Id's 13,14,15
Week 6 = Id's 16,17,18
等等。
我的方法是从第 1 周开始,指定 3 个 Id,然后将第 2 周的周乘以 2,然后接下来的每一周继续乘以 2 并添加 $i = 1
每周递增 $i++
并从起始编号中选择接下来的 3 个 Id。我的下面的解决方案似乎有效,但感觉有点做作。
$weeks = array(1,2,3,4,5,6,7);
$output_arr = array();
$ids_arr = array();
$id1 = 1;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$i = -1;
foreach ($weeks as $week) {
if ($week == 1) {
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
} else {
$id1 = $week * 2 + $i;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
}
$output_arr[$week] = $ids;
$i++;
}
所以我的最终结果是:
$output_arr = Array ( [1] => 1, 2, 3 [2] => 4, 5, 6 [3] => 7, 8, 9 [4] => 10, 11, 12 [5] => 13, 14, 15 [6] => 16, 17, 18 [7] => 19, 20, 21 )
这就是我想要的,但是有没有更简单更干净的方法?而且,需要额外帮助
如果它可以处理具有非顺序 ID 的表,那就会好得多。就我而言,我的 ID 需要是连续的,如果我在 Id 的 EX: 1,2,3,4,6,7,8,10
中出现中断,就会弄乱输出数组。
感谢您的帮助。
最佳答案
不需要将所有星期存储在数组中,一个简单的函数就可以完成这项工作:
$ids = array(1,2,3,4,6,7,8,10);
function weekIds($pWeek){
$wids = array();
for($i=1;$i<=3;$i++)
$wids[] = ($pWeek-1)*3+$i;
return $wids;
}
$seq = weekIds(2);
foreach($seq as $s)
$nonSeq[] = $ids[$s-1];
echo 'Sequential: ' .print_r($seq,true).PHP_EOL;
echo 'Non-Sequential: ' .print_r($nonSeq,true);
输出:
Sequential: Array
(
[0] => 4
[1] => 5
[2] => 6
)
Non-Sequential: Array
(
[0] => 4
[1] => 6
[2] => 7
)
关于php - 如何使用周数来选择唯一记录ID的MYSQL PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574419/