gpt4 book ai didi

php - 列表列逻辑

转载 作者:行者123 更新时间:2023-12-02 07:47:51 25 4
gpt4 key购买 nike

我有一堆列表项,我想将它们排列成 3 列,按字母顺序从上到下,从左到右。这很容易做到,只需将项目的总数除以 3,然后将它们吐出。不过,我需要做的另一件事是保持每列中的项目数量均匀,从每列 4 个开始。

例子:

A    E    I
B F J
C G K
D H L

所以如果有 <= 4 个项目,它只会是 1 列

A    
B
C
D

第 5 个项目将从第 2 列开始,第 9 个项目将从第 3 列开始。

如果有 > 12 个项目,它总是将其添加到最右边的列的末尾,如果其他列的行数相等,则开始新的一行。仍然保持 alpha 排序顺序。

所以对于 14:

A    F    K
B G L
C H M
D I N
E J

和 16:

A    G    L
B H M
C I N
D J O
E K P
F

我在服务器端执行此操作并加载 3 个数组(每列一个),因此对于 16 个项目,它将是:

$left_col = array('A', 'B', 'C', 'D', 'E', 'F');
$mid_col = array('G', 'H', 'I', 'J', 'K');
$right_col = array('L', 'M', 'N', 'O', 'P');

我想将此逻辑保留在服务器端 (PHP) 而不是使用 Javascript 处理它。

最佳答案

试试这个(您甚至可以更改 MIN_ROWSNB_COLUMNS):

<?php

define('MIN_ROWS', 4);
define('NB_COLUMNS', 3);

function store_to_columns($array)
{
$count = count($array);

$result = array();

if ($count <= MIN_ROWS * NB_COLUMNS)
{
foreach($array as $i => $element)
{
$current_column = floor($i / MIN_ROWS);

if (!isset($result[$current_column]))
$result[$current_column] = array();

$result[$current_column][] = $element;
}
}
else
{
$current_column = 0;
$nb_cells = 0;

foreach($array as $i => $element)
{
if (!isset($result[$current_column]))
$result[$current_column] = array();

$result[$current_column][] = $element;

$nb_cells++;

if ($nb_cells >= floor(($count + NB_COLUMNS - $current_column - 1) / NB_COLUMNS))
{
$nb_cells = 0;
$current_column++;
}
}
}

return $result;
}

print_r(store_to_columns(range('A', 'D')));
print_r(store_to_columns(range('A', 'L')));
print_r(store_to_columns(range('A', 'N')));
print_r(store_to_columns(range('A', 'P')));
print_r(store_to_columns(range('A', 'Z')));

关于php - 列表列逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com