首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对具有公共子标题的PHP -2列进行排序

对具有公共子标题的PHP -2列进行排序
EN

Stack Overflow用户
提问于 2012-12-26 21:01:19
回答 1查看 239关注 0票数 0

我的代码做了两列,如下所示:

邻域1

餐厅1

邻域1

餐厅2

邻域1

餐厅3

我要:

邻域1

餐厅1

餐厅2

餐厅3

代码语言:javascript
复制
$result = mysql_query("SELECT ID,RName,NHood FROM Restaurants ORDER BY NHood ASC, TRIM(LEADING 'The ' FROM RName) ASC",$connect);
$numRows = mysql_num_rows($result);
$middleIndex = (int)(($numRows+1) / 2);

$names = array();
while($row = mysql_fetch_assoc($result)) {
    $names[] = $row['RName'];
    $id[] = $row['ID'];
    $hood[] = $row['NHood'];
}

// print the left column
echo "<table>";
echo "<tr>";
echo "<td width=60%>";
echo "<div id=\"left\">\n";
for($i = 0; $i < $middleIndex; $i++) {
    echo $hood[$i];
    echo "<p><a href=\"Restaurant.php?ID=".$id[$i]."\">$names[$i]</a></p>\n";
}
echo "</div>\n";
echo "</td>";

// print the right column
echo "<td>";
echo "<div id=\"right\">\n";
for($i = $middleIndex; $i < $numRows; $i++) {
    echo $hood[$i];
        echo "<p><a href=\"Restaurant.php?ID=".$id[$i]."\">$names[$i]</a></p>\n";
}
echo "</div>\n";  
echo "</tr>";
echo "</table>";
EN

回答 1

Stack Overflow用户

发布于 2012-12-27 02:54:34

下面是您想要的逻辑(pseduocode):

代码语言:javascript
复制
SELECT
    ID,
    RName,
    NHood
FROM
    Restaurants
ORDER BY
    NHood ASC, RName ASC

这应该返回一个结果的列表,首先由邻居,然后根据餐馆的名称。

接下来,您将逐行处理这些结果,以创建具有视图所需数据结构的嵌套数组:

代码语言:javascript
复制
$neighborhoods = array();

foreach($result as $row)
{
    // Add each restaurant to a list named for the current neighborhood
    $neighborhoods[$row['NHood']][] = $row['RName'];
}

这将产生这样的数据结构:

代码语言:javascript
复制
$neighborhoods = array(
    'neighborhood1' => array(
        'restaurant1',
        'restaurant2',
        'restaurant3',
    ),
    'neighborhood2' => array(
        'restaurant1',
        'restaurant2',
    ),
)

然后,您将通过这样做来使用:

代码语言:javascript
复制
foreach($neighborhoods as $neighborhood => $restaurants)
{
    echo $neighborhood;
    foreach($restaurants as $restaurant)
    {
        echo $restaurant;
    }
}

如果您的列表非常大,并且您担心内存,那么实现就会有点不同,但是逻辑是一样的。这种技术更快,但是读取和维护起来有点困难,因为表示和数据层逻辑都是混合在一起的:

代码语言:javascript
复制
$currentNH = null;

while($row = fetch_row($results))
{
    // Detect when the neighborhood changes
    if($currentNH != $row['NHood']) {
        echo $row['NHood'];
    }

    echo $row['RName'];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14046219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档