PHP 连续显示两条记录,然后从中间开始重复



我正在尝试显示多个类别(儿童(的速度攀登比赛的起始顺序表。PHP/Mysql.有两条车道被简单地攀登,A和B。每个参赛者都要爬上两条车道。车道 A 的起始顺序和车道 B 的起始顺序应与车道 A 的起始编号顺序相同,交错为 50%,在起始车数量奇数的地方向下舍入。

示例:假设我有一个包含 9 个竞争对手的类别,从 101 到 109 开始。输出起始顺序表应如下所示:

Lane A    Lane B  
101       105    
102       106    
103       107    
104       108    
105       109       
106       101    
107       102    
108       103    
109       104    

有什么想法吗?查询或几个循环或... 谢谢

编辑: 查询以按顺序获取表 车道 A 然后是车道 B:

create temporary table laneA
select * from competitors where category = 1 order by stNo;
create temporary table laneB
select * FROM competitors where category = 1 order by (case when stNo > (select avg(stNo) from competitors )then 1 else 2 end), stNo;
select 1 as rank, x.* from laneA as x
union ALL
select 2 as rank, y.* from laneB as y
order by rank;
drop temporary table laneA;
drop temporary table laneB;

将数据放在一个从零开始的数组中,循环访问它。计算访问要在第二列中显示的相应元素所需的索引:

$data = range(101, 109); // fake data array, [0 => 101, 1 => 102, ...]
$c = count($data);
for($i=0; $i<$c; ++$i) {
echo $data[$i] . ' - ' . $data[ ($i + $c / 2) % $c ] . "<br>n";
}

回显第一列中的当前元素,以及索引偏移元素计数一半的元素,再次通过计数的模数"钳制"到实际索引范围。(对于不均匀的计数,内部计算会导致最后带有 .5 的浮点数,但模运算会自动平衡这一点。

结果:

101 - 105
102 - 106
103 - 107
104 - 108
105 - 109
106 - 101
107 - 102
108 - 103
109 - 104

如果你再添加一个,所以你有偶数个项目,它将是

101 - 106
102 - 107
103 - 108
104 - 109
105 - 110
106 - 101
107 - 102
108 - 103
109 - 104
110 - 105

相关内容

最新更新