1

私は本の情報を含むテーブルを持っており、ユーザーは自分が望むようにテーブルをソートするオプションを持っている必要があります。

3つのオプションがあります。

Author, Title, Edition

それらはすべてASCENDINGまたはDESCENDINGにすることができます。

しかし、その選択には順序はありません。ユーザーは、タイトルASCとエディションDESC、または作成者DESCとエディションASCとタイトルDESC、またはエディションASCのみを選択できます。

質問は。PHPでこれを作成するのにどちらの方法が良いですか?フォームで?配列?この情報をこのように管理するにはどうすればよいですか?

{"Author" => "Desc", "Title" => "Asc"}

私はすでに並べ替えスクリプトを持っています。このようにカスタマイズされた情報を管理する方法を理解する必要があります。配列の方が良いと思いますが、どうすればフォームを通過できますか?

私は理解しようとしましたが、すべての解決策は醜く、コードが貧弱です。

理解していなかった人のためのサービスの写真は次のとおりです。

ここに画像の説明を入力してください

これまでの基本的なすべてのコードは次のとおりです。

<?php
    $file = file_get_contents('books.json');
    $json = json_decode($file, true);
    $json = array_map(function($a) { return $a['book'][0]; }, $json['books']);
    foreach ($json as $key => $row):
        $title[$key] = $row['Title'];
        $author[$key] = $row['Author'];
        $edition[$key] = $row['Edition'];
    endforeach;
    array_multisort($title, SORT_ASC, $author, SORT_ASC, $json); // This is the default
    ?>
    <form method="post">
        <table align="center">
            <tr>
                <td>
                    Sort By
                </td>
                <td>
                    Direction
                </td>
            </tr>
            <tr>
                <td>
                    <select class="select" id="firstRule" name="firstRule">
                        <option value="">Select</option>
                        <option value="Author">Author</option>
                        <option value="Title">Title</option>
                        <option value="Edition">Edition</option>
                    </select>
                </td>
                <td>
                    <select id="firstRuleOrder" name="firstRuleOrder">
                        <option value="">Select</option>
                        <option value="up">Ascendent</option>
                        <option value="down">Descendent</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit">   
                </td>
            </tr>
        </table>
    </form>
4

1 に答える 1

1

「firstRule」と「firstRuleOrder」の代わりに、ドロップダウンに「rule[0]」と「ruleOrder[0]」という名前を付ける必要があります。次に、配列インデックスを増やしてそれらを複製します(JavaScriptを使用して複製するか、列の数だけ表示することができます)。

への呼び出しを作成するarray_multisortには、繰り返して$_POST['rule']引数$_POST['ruleOrder']の配列を作成する必要があります。次に、実際の関数呼び出しが発生しcall_user_func_arrayます(引数の数が事前にわからないため、これが必要です)

于 2013-03-12T12:38:33.460 に答える