对数据库中foreach插入表中的行进行排序


Sort rows being inserted into a table by a foreach from database

我有一个表,它的内容是从数据库中提供的。该表有一个带有标准表头行的,然后我有一个foreach(),它从include中获取信息并将其吐到表体。(每个条目插入一个新条目。)

我需要表最初按日期结束列排序,而不是按符号列排序。我正在使用Tablesorter插件,我尝试过这样做:

$(document).ready(function() { 
    // call the tablesorter plugin 
    $("#bin").tablesorter({ 
        // sort on the first column and third column, order asc 
        sortList: [[6,1],[0,0]] 
    }); 
}); 

这是可行的,但问题是,我有一个从foreach开始每隔一行应用的背景,当页面加载时,表分类器对行进行排序时,背景颜色不是每隔一行,而是在表分类器移动这些行的零星位置。

这是我的代码:

    <table cellspacing="0" cellpadding="0" id="bin" width="100%">
        <thead>
            <tr>
                <th style="text-align:left; padding-top: 20px;" width="10%">Symbol <img src="/images/sort-arrow.jpg" alt="Sort by Symbol" class="sort-right move-left bottom-image"/></th>
                <th style="text-align:left;" width="20%">Company<br><span class="move_right">Name</span> <img src="/images/sort-arrow.jpg" alt="Sort by Company Name" class="sort-right move-left"/></th>
                <th style="text-align:left; padding-top: 20px;" width="23%">Industry <img src="/images/sort-arrow.jpg" alt="Sort by Industry" class="sort-right move-left bottom-image"/></th>
                <th style="text-align:center;" width="10%"><span class="center-text">Buy</span><br>Date <img src="/images/sort-arrow.jpg" alt="Sort by Buy Date"/></th>
                <th style="text-align:center;" width="10%"><span class="center-text">Buy</span><br>Price &nbsp;<img src="/images/sort-arrow.jpg" alt="Sort by Buy Price"/></th>
                <th style="text-align:center;" width="10%"><span class="center-text">Closed</span><br>Price &nbsp;<img src="/images/sort-arrow.jpg" alt="Sort by Closed Price"/></th>
                <th style="text-align:center;" width="10%"><span class="center-text">Closed</span><br>Date &nbsp;<img src="/images/sort-arrow.jpg" alt="Sort by Closed Date"/></th>
                <th style="text-align:center;" width="10%"><span class="center-text">Total</span><br>Return &nbsp;<img src="/images/sort-arrow.jpg" alt="Sort by Current Return"/></th>
            </tr>
        </thead>
        <tbody>
<?php
    foreach($buylist as $a) {
        $bg = ($c % 2) ? ' class="even"' : '';
        //$direction = (is_numeric($a['creturn']) && $a['creturn'] >= 0) ? 'up_green' : 'down_red';
        //$tick = (is_numeric($a['creturn']) && $a['creturn'] >= 0) ? '<img src="/images/icon_up.png">' : '<img src="/images/icon_down.png">';
        //$tick2 = (is_numeric($a['cchange']) && $a['cchange'] >= 0) ? '<img src="/images/icon_up.png">' : '<img src="/images/icon_down.png">'; 
        //$tick3 = (is_numeric($a['final_return_pct']) && $a['final_return_pct'] >= 0) ? '<img src="/images/icon_up.png">' : '<img src="/images/icon_down.png">';   
        $type = '';
        $entry_price = (is_numeric($a['buyprice'])) ? '$'.$a['buyprice'] : '&ndash;';
        $sold_price = (is_numeric($a['sold_price'])) ? '$'.$a['sold_price'] : '&ndash;';
        $total_return= sprintf("%.02f", (($a['sold_price'] - $a['buyprice'])/$a['buyprice']) * 100);
?>
            <tr<?=$bg;?>>
                <td ><b><a href="/gamechangers/getaquote/?symbolsearch=<?php echo $a['symbol']; ?>"><?=$a['symbol'];?></a></b><?=$type;?></td>
                <td><?=$a['name'];?></td>
                <td valign="top"><?=$a['industry'];?></td>
                <td align="center"><?=$a['buydate'];?></td>
                <td align="center"><?=$entry_price;?></td>
                <td align="center"><?php echo $sold_price; ?></td>
                <td align="center"><?=$a['sold_date'];?></td>
                <td align="center"><?php echo $total_return; ?>%</td>
            </tr>
<?php
        $c++;
    }
?>
        </tbody>
    </table>

表格的CSS:

table#bin, table#fallen, table#growth, table#turn { margin:10px 0; border:1px solid #ccc; }
th, td { padding:10px 7px; }
tr th { background:#ededed; color:#545454; font-weight:bold; cursor:pointer;}
#bin tr.even td { background:#e1eff1; }
#turn tr.even td { background:#f7f2d8; }
#fallen tr.even td { background:#f2dcbd; }
#growth tr.even td { background:#deefdc; }
td.title a { text-decoration:none; display:block; text-transform:uppercase; font-weight:bold;}
#bin td.title { background:#5198a0; }
#fallen td.title { background:#e6a850; }
#turn td.title { background:#ebd870; }
#growth td.title { background:#6ab065; }
#bin td.title a { color:#182c2e; font-size:13px;}
#fallen td.title a { color:#352713;  font-size:13px;}
#turn td.title a { color:#37321a;  font-size:13px; }
#growth td.title a { color:#233d21;  font-size:13px;}
hr { border:2px dotted #ccc; border-bottom:none; }
#tooltip { position:absolute; z-index:3000; border:1px solid #111; background-color:#eee; padding:5px; }
#tooltip h3, #tooltip div, #tooltip p { margin:0; }
.right_para_inside {
    border-top: 1px solid #CCC;
    border-bottom: 1px solid #CCC;
    padding-bottom: 7px;
    padding-top: 7px;
    margin-bottom: 5px;
}
.right_para {
    font-size: 16px;
    color: #999;
}
.right_para .right_para_inside a:hover {
    color: #000;
    text-decoration: none;
}

所以我的问题是,如何让PHP根据截止日期自动对表进行排序?

想添加另一个细节。用户可以通过点击标题列(这就是表分类器插件的用途)来调用表

当我使用sortList函数时,它确实按照预期的截止日期对表进行了排序,但表的颜色(奇数、偶数、奇数)完全混乱了。

不要通过PHP添加行类,而是使用CSS:

tr:nth-of-type(even) {
  background-color:#ccc;
}

使用CSS而不是通过PHP添加类应该可以解决您的问题。

您可以使用表分类器插件的小部件来为行着色。并且已经有一个默认的小部件zebra,它将类oddeven应用于行。

$("#bin").tablesorter({ 
    widgets: ['zebra'] 
}); 

插件文档中的更多信息。