Эта проблема требует решения на сервере и повышения производительности страницы за счет исключения сценария JavaScript.
Во-вторых, вы можете упростить жизнь, не используя таблицы, а используя div.
Давайте сначала посмотрим на предложенную структуру данных. Мы будем хранить весь вывод в массиве, так как вы используете PHP.
$data=array[0...n];
Это просто сортирует генерацию бизнес-логики.
Теперь давайте посмотрим на логику представления, сначала визуально предложенные div!
$ data_length = m
j=0 j=1 j=2 j=3 ..... j= x
i=0 [1] [4] [7] [10] []
i=1 [2] [5] [8] [11] []
i=2 [3] [6] [9] [12] []
y [] [] [] [] []
Все div будут перемещены влево.
Очищающий div будет напечатан после завершения строки.
Теперь нам нужно определить отношения наших данных с позицией. Небольшое наблюдение за таблицей показывает, что все горизонтальные позиционные значения разделены на 3, а все вертикальные - на единицу (т. Е. Нам нужно перебирать наш массив $ data с шагом в три!), Эффективно обрабатывая наши div следующим образом:
j=0 j=1 j=2 j=3 ..... j= x
i=0 [1] [4] [7] [10] []
Псевдоалгоритм
$imax=2; // spec
$number_cells = m/imax // total number of cells
$jmax=$number_cells/3 // check rounding etc left out at this stage
// you can use mod % to see if there are
// remainders etc.. on second script iteration
А теперь для итерации
for ($i=0;$i<$imax-1;$i++){
for ($j=0;$j<$jmax;$j++){
$out.=wrap_in_div($data[($j*3)+(i+1)]);
}
}
Обратите внимание, что я не удосужился определить макет функции wrap_in_div
как тривиальный.
Надеюсь, это поможет с Рождеством! Программа была у меня в голове, поэтому, пожалуйста, переведите псевдокод в реальные $! :)