1

我必须根据用户选择的排序方式对表中的文件数据进行排序(只有选项是升序和降序)

这是我的代码:

if($submit=="Display"){
    if ($headings=="0"){echo "<h2>Error</h2>";}
    elseif ($search==""){echo "<h2>Error</h2>";}
    else {

        if($headings==$headings_array[0])
            echo "<table border='1'>";
            $f = fopen("data.csv", "r");

            while ($line = fgetcsv($f)){
            echo "<tr>";
                foreach ($line as $cell) {
                    echo "<td><center>".$cell."</center></td>";
                }
            echo "<tr>";
            }   
            fclose($f);

            function my_sort($a, $b){
                if ($a == $b) return 0;
                return ($a > $b) ? -1 : 1;
                }

            $arr = $cell;

            usort($arr, "my_sort");

            print_r ($arr);
            echo "</table>";
    }
}

但这不是排序。有人可以发现它有什么问题吗?如果你有更有效的方法,请让我知道,因为我有 15 个,为每个标题headings做这件事会很痛苦。if statements

要清楚,这是我必须做的:

对于用户选择的每个排序字段(即标题),我必须根据该标题安排显示

IEif($headings==$headings_array[0])

$headings_array[0]等于Names因此,表格应按字母(或反字母)顺序显示值Names

额外信息:

$headings是选择框的名称 是选择框
$headings_array的数组值
$search是单选按钮,包含表格是否应该按升序或降序排序

PHP only

任何帮助表示赞赏!

4

2 回答 2

0

我认为您的排序功能是错误的。它的作用与 sort() 或 rsort() 相同。

usort 只是比较两个数组元素并根据您返回的值确定它们是否需要交换。您发送的 $a 和 $b 应该是 csv 行。然后你比较你需要的索引并相应地交换行。

您需要按标题给出的数组索引对其进行排序。也许尝试这样的事情:

global $headings;

...
$arrayToBeSorted = array();

// send in an array of lines
while ($line = fgetcsv($f)){
    $arrayToBeSorted[] = $line;
}

usort($arrayToBeSorted, 'my_sort');

function my_sort($lineA, $lineB){
    // set this to the column that needs to be sorted
    global $headings;

    $linePartsA = explode(',' $lineA);
    $linePartsB = explode(',' $lineB);
    if ($linePartsA[$headings] == $linePartsB[$heading) return 0;
        return ($linePartsA[$headings] > $linePartsB[$heading]) ? -1 : 1;
    }
}
于 2012-05-02T02:06:28.620 回答
0

为什么你只想使用 php 。我使用了非常高效的 jquery 表排序器。这里是链接表排序器

于 2012-05-02T03:47:33.720 回答