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

明確にするために、ここに私がしなければならないことがあります:

ユーザーが選択したソート フィールド (見出し) ごとに、その見出しに従って表示を調整する必要があります。

すなわちif($headings==$headings_array[0])

$headings_array[0]は次の値に等しいNamesため、テーブルには次の値をアルファベット順 (またはアルファベットの逆順) で表示する必要があります。Names

追加情報:

$headingsは選択ボックスの名前です は選択ボックス
$headings_arrayの配列値です
$searchテーブルを昇順または降順でソートするかどうかを含むラジオ ボタン

PHP のみ

どんな助けでも大歓迎です!

4

2 に答える 2

0

なぜあなたはphpだけを使いたいのですか?私は非常に効率的なjqueryテーブルソーターを使用しました.hereはリンクテーブルソーターです

于 2012-05-02T03:47:33.720 に答える
0

あなたのソート機能は間違っていると思います。sort() または rsort() と同じことをしています。

usort は単純に 2 つの配列要素を比較し、返された値に基づいてそれらを交換する必要があるかどうかを判断します。$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 に答える