我必须根据用户选择的方式对表中的文件数据进行排序(只有选项是升序和降序)</ p>
这是我的代码:
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>";
}
}
但它没有排序。有人能发现它有什么问题吗?如果你有一个更有效的方法,请告诉我,因为我有headings
,对每个标题if statements
都会很痛苦。
要明确,以下是我必须做的事情:
对于用户选择的每个排序字段(标题),我必须根据标题排列显示
即if($headings==$headings_array[0])
$headings_array[0]
等于Names
因此,表格应按字母(或反向字母)顺序显示Names
额外信息:
$headings
是选择框的名称
$headings_array
是选择框的数组值
$search
是单选按钮,包含表格是按升序还是按降序分类
仅限PHP
感谢任何帮助!
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
为什么你只想使用php。我使用了非常有效的jquery表分类器。链接table sorter