如何在php页面中对行记录进行排序?

时间:2014-01-27 17:54:08

标签: php

我在php页面上有一个表,其中“Offical_gene_Symbol”列需要对“Assending”进行排序。这是该特定列的php块。

if($test['test_type_id'] == 1 || $test['test_type_id'] == 5) {
    $gene_ids = FetchGenesByPanelTest($test['id']);
    $genes = array();
    foreach($gene_ids  as $gi){
        $genes[] = FetchGene($gi);      
    }
    <table>
                <tr>
                    <th>Offical Gene Symbol</th>
                    <th style="width:200px;">OMIM Id</th>
                </tr>
                <?php foreach($genes as $gene): ?>
                <tr>
                    <td><a href="/gene-detail.php?id=<?= $gene['id']; ?>&iframe=true&width=790&height=600" rel="prettyPhoto" title="<?= htmlentities($gene['offical_gene_symbol']); ?>"><?= $gene['offical_gene_symbol']; ?></a></td>
                    <td><a href="http://omim.org/entry/<?= $gene['omim_id']; ?>" target="_blank"><?= $gene['omim_id']; ?></a></td>
                </tr>
                <?php endforeach; ?>
                </table>

您能帮忙我在这段代码中如何做到这一点?提前致谢。更新了代码。

4 个答案:

答案 0 :(得分:3)

由于$genes似乎是一个多维数组,我想你希望它按标题排序('offical_gene_symbol')我建议你使用usort函数来为你提供一种创建方法自定义比较算法。 至于比较,php为您提供了两种不同的比较方法:

  • strcasecmp二进制安全不区分大小写的字符串比较,返回&lt;如果str1小于str2,则为0; &GT;如果str1是0,则为0 大于str2,如果它们相等则为0。

  • strcmp二进制安全字符串比较(区分大小写)。作为 上述功能。

在php 5.3+中,您可以通过这种方式执行排序:

usort($genes, function($a, $b) {
    return strcasecmp($a['offical_gene_symbol'],$b['offical_gene_symbol']);
});

foreach($genes as $gene) {
...
}

在php&lt; 5.3你必须使用一个可调用函数:

function cmp($a, $b)
{
    return strcasecmp($a['offical_gene_symbol'],$b['offical_gene_symbol']);
}
    usort($genes, 'cmp');

    foreach($genes as $gene) {
    ...
    }

答案 1 :(得分:0)

直接使用PHP sort() function。不是吗?

答案 2 :(得分:0)

如果这是一个PHP数组,请检查这个函数,确保检查php docs

中的其他排序函数
$array = array(
    array('Offical_gene_Symbol' => 'v'),
    array('Offical_gene_Symbol' => 't'),
    array('Offical_gene_Symbol' => 'a'),
    array('Offical_gene_Symbol' => 'c'),
    array('Offical_gene_Symbol' => 'd')
    );

排序

sort($array);
echo debug($array);

输出

array(5) (
    0 => array(1) (
        "Offical_gene_Symbol" => string(1) "a"
    )
    1 => array(1) (
        "Offical_gene_Symbol" => string(1) "c"
    )
    2 => array(1) (
        "Offical_gene_Symbol" => string(1) "d"
    )
    3 => array(1) (
        "Offical_gene_Symbol" => string(1) "t"
    )
    4 => array(1) (
        "Offical_gene_Symbol" => string(1) "v"
    )
)

rsort

rsort($array);
print_r($array);

输出

array(5) (
    0 => array(1) (
        "Offical_gene_Symbol" => string(1) "v"
    )
    1 => array(1) (
        "Offical_gene_Symbol" => string(1) "t"
    )
    2 => array(1) (
        "Offical_gene_Symbol" => string(1) "d"
    )
    3 => array(1) (
        "Offical_gene_Symbol" => string(1) "c"
    )
    4 => array(1) (
        "Offical_gene_Symbol" => string(1) "a"
    )
)

答案 3 :(得分:-1)

您可以在将数组回显到页面之前对其进行排序。

类似的东西:

</tr>
<?php
sort($genes);
foreach($genes as $gene):
?>
<tr>

这将按值以升序为您提供值。

编辑:更改了asort以进行排序。