gpt4 book ai didi

php - 在 3 个不均匀的列中显示 UL 数据

转载 作者:行者123 更新时间:2023-11-29 00:40:32 26 4
gpt4 key购买 nike

我有一个 MySQL 查询,我将其保存到一个变量以在页面上输出。我有一个无序列表中的数据,但我试图使用 3 个向左浮动的无序列表将数据分成三列。这是我当前的代码:

        $sqlCommand = 
"SELECT list_specialty.id, list_specialty.specialty FROM list_specialty
ORDER BY list_specialty.specialty ASC";
$query = mysqli_query($myConnection,$sqlCommand) or die (mysqli_error($myConnection));

$specialtyDisplay = '';

$num = mysqli_num_rows($query);
$split = intval($num/3); //number of items in every column

$i = 0;

while ($row = mysqli_fetch_array($query)) {
$specialtyid = $row["id"];
$specialtyname = $row["specialty"];

$specialtyDisplay .=
'<li><a href="doctor.php?specialty=' . $specialtyid . '">' . $specialtyname . '</a></li>';
$i++;
if ($i == $split) {
$specialtyDisplay .= '</ul> <ul>';
$i = 0;
}

}

只要我的数据能被 3(相等的列)整除,这段代码就可以很好地工作。但是,当我的总行数不能被 3 整除时,上面的代码将不起作用。

我需要一个平衡列的解决方案,因此我可以有 3 个相等的列,第一列中有一个额外的元素,或者第一列和第二列中有一个额外的元素。

我需要更改代码中的哪些内容才能解决这个问题?

最佳答案

这会起作用:

  1. $split设置为最长列的长度
  2. 行有 0、1 或 2 列长一个元素。 -> $longcols = $num % 3
  3. 当打印列号 $longcols 时,从 $split 中减去 1(除非所有列的长度都相等)

在代码中实现:

$num = mysqli_num_rows($query);
$split = ceil($num/3); // 1.

$i = 0;
$col = 1; //for counting columns
$longcols = $num % 3; // 2.

while ($row = mysqli_fetch_array($query)) {
$specialtyid = $row["id"];
$specialtyname = $row["specialty"];

$specialtyDisplay .=
'<li><a href="doctor.php?specialty=' . $specialtyid . '">' . $specialtyname . '</a></li>';
$i++;
if ($i == $split) {
$specialtyDisplay .= '</ul> <ul>';

if( $longcols != 0 && $longcols == $col ) { $split--; } // 3.
$i = 0;
$col++; //increase columns count
}

}

带有注释的行是我更改/插入的行。

关于php - 在 3 个不均匀的列中显示 UL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464321/

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