PHP显示mySql数组首字母

问题描述 投票:0回答:2

我想将我们数据库中的企业显示为按字母顺序排列的列表,按首字母排序。目前,并不是所有的字母都有代表。作为一个可视化示例,用户页面将如下所示:

按名称显示业务 -
| A | C | F | G | H | L | ...
(而上面的每个字母都会显示以该字母开头的企业。)

但是,我很难在php页面上显示'first letters'的mysql查询结果。
要生成结果作为查询,我有以下行:

$result4 = mysqli_query($conn,"SELECT DISTINCT LEFT('bname', 1) FROM 'bisEntry');

(这来自Returning the DISTINCT first character of a field (MySQL)

然后,为了在页面上显示每个业务的“首字母”,我尝试了以下方法:

while ($row = mysqli_fetch_array($result4, MYSQLI_ASSOC)) {
        echo "| ". $row['bname'] ." ";
        }

对于第一个示例,数组正确地“计算”不同的首字母并显示:

按名称显示业务 -
| | | | | | | ...

但是,实际的字母没有显示。我挂断了如何将数组的结果转换为将要显示的实际字母。

我试过了……

while($row = mysqli_fetch_array($result4))
        {
            foreach ($row['category'] as $name) {
            echo "| ". $name;
            }

但是,这返回了错误

 foreach() argument must be of type array|object
这让我相信我实际上没有正确创建数组。

我确定解决方案就在我的鼻子里,但我就是无法解开它。感谢您的帮助。

php mysql
2个回答
1
投票

那是因为你没有直接选择列

bname
,所以列名变成了
LEFT('bname', 1)
(例如
[["LEFT('bname', 1)" => 'A'], ["LEFT('bname', 1)" => 'C']]
)。添加别名作为列名:

$result4 = mysqli_query($conn, "SELECT DISTINCT LEFT('bname', 1) AS bname FROM bisEntry");

您始终可以使用 xDebug 或简单地调试变量中返回的内容

var_dump($row);


0
投票

自从 (PHP 8 >= 8.1.0) 以来,当您只需要从查询结果中获取一列时,您可以在下一种方式中使用

mysqli_fetch_column

<?php
$conn = &$mysqli;
$result4 = mysqli_query($conn,"SELECT DISTINCT LEFT(`bname`, 1) FROM `bisEntry`");

while ($letter = mysqli_fetch_column($result4, 0)) {
    echo "| ". $letter ." ";
}

https://phpize.online/s/Xn

© www.soinside.com 2019 - 2024. All rights reserved.