我必须根据用户选择排序的方式对表中的文件数据进行排序(只有选项是升序和降序(
这是我的代码:
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表排序器,它非常高效,这是链接表排序器