如何对包含 csv 文件数据的表进行排序


How to sort a table containing csv file data

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

这是我的代码:

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会很痛苦。

需要明确的是,这是我必须做的:

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

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

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

额外信息:

$headings是选择框
的名称 $headings_array是选择框
的数组值 $search是包含表格应按升序还是降序

排序的单选按钮仅限菲律宾比索

任何帮助不胜感激!

我认为你的排序函数是错误的。它正在做与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;
    }
}

为什么只想使用 php .我使用了jquery表排序器,它非常高效,这是链接表排序器