以字母表形式在列中显示mysql结果


Display mysql results in columns alpabetically

UPDATE:很抱歉,我第一次的问题不清楚,希望这更有意义。我有一个查询,它列出了所有类别,现在它正在迭代并将其放置在段落标记中。

$data = $conn->query('SELECT * FROM category ORDER BY category_name');
foreach($data as $row) {
echo '
<p><a href="category/'.$row['category_slug'].'">'.$row['category_name'].'</a></p>';
}

我怎么能把所有的名字按字母顺序放在列里呢

A---------B--------C

动作--------Brah----卡通

冒险----布拉----漫画

我可以创建一列,然后在每个列中进行查询,但这意味着要对字母表中的每个字母进行查询。我可以用一个查询来实现这一点吗。

我想他想要的是这样的东西:

$wordArray = array('august', 'March', 'october', 'April', 'January', 'February', 'June', 'July');
foreach($wordArray as $word){
    // Get first letter uppercased
    $letter = ucfirst(substr($word, 0, 1));
    $ordered[$letter][] = $word;
}
echo '<pre>';
print_r($ordered);
echo '</pre>';

输出为:

    Array
(
    [A] => Array
        (
            [0] => august
            [1] => April
        )
    [M] => Array
        (
            [0] => March
        )
    [O] => Array
        (
            [0] => october
        )
    [J] => Array
        (
            [0] => January
            [1] => June
            [2] => July
        )
    [F] => Array
        (
            [0] => February
        )
)

然后你可以构建一个像@CodeGodie这样的表,你就完成了:)

在获取数据并显示数据时,您可能需要定义显示顺序的东西。

$query = "SELECT * FROM category ORDER BY category_name ORDER BY `category` ASC";
$row = mysql_query($query);
$row = mysql_fetch_object($row);
//Count number of pets
$count = mysql_num_rows($query);
//Figure out how many pets to put in each column
$columncount = ceil($count/3);
$lastcolumncount = $count - $columncount *2;
$middlecolumnstart = $count - $columncount - $lastcolumncount +1;
$lastcolumnstart = $count-$lastcolumncount +1;
//Put the pets into three columns
if ($row): 
    $count = 0;
    ?>
    <div class="column">
        <?php
        foreach ($rows as $cat):
            $count ++;
            if($count == $middlecolumnstart) {
                echo '</div><div class="column">';
            }
            if($count == $lastcolumnstart) {
                echo '</div><div class="column last-column">';
            }
           ?>
            <a href=""><?php echo $cat->category_name; ?></a>
        <?php 
        endforeach;
    endif; ?>
</div>
<div style="clear:both;"></div>

CSS:

.column {
    width:180px;
    float:left;
    margin-right:26px;
}
.olumn a {
    display:block;
    width:100%;
    margin-bottom:10px;
}
.column.last-column {
    margin-right:0;
}

问题不清楚。

快速解决方案:

 $data = $conn->query('SELECT * FROM category ORDER BY category_name');
 echo '<table><tr><td>';
 $curIndexLatter='';
 foreach($data as $row) {
    if ($curIndexLatter != '' && $curIndexLatter!=substr($row['category_name'],0,1) )
    echo '</td><td>';
    echo '<p><a href="category/'.$row['category_slug'].'">'.$row['category_name'].'</a></p>';
    $curIndexLatter=substr($row['category_name'],0,1); 
}
echo '</td</tr></table>';

首先,您进行如下排序:

$array = $data->fetch_assoc();
$arr = array();
foreach ($array as $n) {
    $f = substr($n, 0, 1);
    $arr[$f] = array();
    foreach ($array as $n2) {
        $f2 = substr($n2, 0, 1);
        if ($f2 === $f) {
           array_push($arr[$f], $n2);
        }
    }
}
?>

然后,您可以对其进行迭代以构建您的列,如下所示:

$cols = "";
foreach ($arr as $letter => $names) {
    $column = "<div class='column'>";
    $column .= "<h3>$letter</h3>";
    foreach ($names as $name) {
        $column .= "<div>$name</div>";
    }
    $column .= "</div>";
    $cols .= $column;
}
?>

现在使用HTML

<body>
    <?= $cols ?>
</body>

CSS

.column{
    float:left;
    padding:10px;
}