1

我有一个包含书籍信息的表格,用户必须可以选择根据需要对表格进行排序。

有三个选项:

Author, Title, Edition

它们都可以是 ASCENDING 或 DESCENDING。

但是该选择没有顺序。用户可以选择:Title ASC 和 Edition DESCAuthor DESC 和 Edition ASC 和 Title DESC甚至只是Edition 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

下拉菜单应命名为“rule[0]”和“ruleOrder[0]”,而不是“firstRule”和“firstRuleOrder”。然后通过增加数组索引来复制它们(您可以使用 JavaScript 来做到这一点,或者只显示与列一样多的列)。

要构造对 的调用array_multisort,您必须遍历$_POST['rule']$_POST['ruleOrder']创建一个参数数组。然后发生实际的函数调用call_user_func_array(这是必要的,因为您事先不知道参数的数量)

于 2013-03-12T12:38:33.460 回答