PHP 5.2功能需要一个记录阵列的GENERIC分拣(PHP 5.2 Function neede

2019-10-29 21:40发布

有人现在一定已经想出了一个解决方案。 我们正在使用PHP 5.2。 (不要问我为什么。)我写了一个PHP类来显示一个记录为一个HTML表格/数据网格,我希望扩展它,以便我们可以按哪个列用户选择数据网格。 在下面的例子中的数据,我们可能需要通过名称,衬衫,转让或年龄字段中记录数组进行排序。 我会照顾显示部分的,我只需要对数据进行排序阵列的帮助。

像往常一样,我查询数据库,以得到一个结果,循环throught他造成的,并把记录到assciateiave阵列。 所以,我们最终得到一个数组的数组。 (见下文)。我需要能够通过在数据集中的任何列进行排序。 不过,我不知道在设计时的列名,我也不会知道,如果colums将字符串或数值。

我看到一吨这一解决方案,但我还没有看到一个很好的和通用的解决方案可有人请提出一个办法,我可以记录数组是通用的排序,在任何记录是否行得通呢? 同样,我不知道在设计时的字段名称或数据类型。 下面提出的阵列仅仅是一个例子。

更新:是的,我很想有数据库做排序,但只是不会发生。 我们正在运行的查询是非常复杂的。 (我不是真的查询的星际旅行字符表),包括加入,限制和复杂的WHERE子句。 编写一个函数来挑开的SQL语句添加一个ORDER BY真的不是一个选项。 此外,有时我们已经拥有了数组,它是查询,而不是运行新的查询能力的结果。

Array
(
    [0] => Array
        (
            [name] => Kirk
            [shrit] => Gold
            [assign] => Bridge
        )

    [1] => Array
        (
            [name] => Spock
            [shrit] => Blue
            [assign] => Bridge
        )

    [2] => Array
        (
            [name] => Uhura
            [shrit] => Red
            [assign] => Bridge
        )

    [3] => Array
        (
            [name] => Scotty
            [shrit] => Red
            [assign] => Engineering
        )

    [4] => Array
        (
            [name] => McCoy
            [shrit] => Blue
            [assign] => Sick Bay
        )

)

Answer 1:

嗯,首先,你应该在数据库中的排序(它的效率更高)。 如果不

在PHP 5.3+:

function getSortCommand($field, $sortfunc) {
    return function($var1, $var2) use ($field, $sortfunc) {
        return $sortfunc($var1[$field], $var2[$field]);
    }
}

在PHP <= 5.2,你需要创建一个纯函数:

function getSortCommand($field, $sortfunc) {
    return create_function('$var1, $var2', 'return '.$sortfunc.'($var1["'.$field.'"], $var2["'.$field.'"]);');
}

两种用法:

$array = usort($array, getSortCommand('name', 'strnatcasecmp'));

要调整场,你只需要改变的$字段参数。 要更改排序功能,只需更改$ sortfunc参数...



Answer 2:

我建议你在数据库中做到这一点。 否则,您可以使用此:

function sortby(&$arr, $column) {
    usort($arr,
        function ($a, $b) use ($column) {
            return strcmp($a[$column], $b[$column]);
        }
    );
}


Answer 3:

查询数据库时,你一定要来排序。

您可以通过添加一个链接喜欢这样做?orderby=name&dir=asc<TH>小号

然后,当你查询数据库您检查是否存在$_GET['orderby'] 如果它存在,你by子句添加订单。

一个客户方的选择是http://tablesorter.com/docs/



文章来源: PHP 5.2 Function needed for GENERIC sorting of a recordset array