通过表单传递定制的多个参数

时间:2013-03-12 12:07:37

标签: php

我有一个包含书籍信息的表格,用户必须有选项 按照自己的意愿对表格进行排序。

有三种选择:

Author, Title, Edition

所有这些都可以是升级或降级。

但是那个选择没有顺序。用户可以选择:标题ASC和版本DESC 作者DESC和版本ASC和标题DESC ,甚至只选择版本ASC

问题是。哪种方式在PHP中创建更好?通过表格?阵列?我怎么能把这些信息管理得像这样?

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

我已经有了排序脚本,我只需要了解如何以这种方式管理自定义信息。我认为数组会更好但我怎么能通过Forms?

我试图搞清楚,但我认为所有解决方案都很难看并且代码很差。

以下是为那些不理解的人提供的服务图片:

enter image description here

这基本上是迄今为止所有内容的代码:

<?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>

1 个答案:

答案 0 :(得分:1)

下拉列表应命名为“rule [0]”和“ruleOrder [0]”,而不是“firstRule”和“firstRuleOrder”。然后使用增加的数组索引复制它们(您可以使用JavaScript执行此操作,或只显示有列的数量)。

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