我有一个包含书籍信息的表格,用户必须有选项 按照自己的意愿对表格进行排序。
有三种选择:
Author, Title, Edition
所有这些都可以是升级或降级。
但是那个选择没有顺序。用户可以选择:标题ASC和版本DESC 或作者DESC和版本ASC和标题DESC ,甚至只选择版本ASC 。
问题是。哪种方式在PHP中创建更好?通过表格?阵列?我怎么能把这些信息管理得像这样?
{"Author" => "Desc", "Title" => "Asc"}
我已经有了排序脚本,我只需要了解如何以这种方式管理自定义信息。我认为数组会更好但我怎么能通过Forms?
我试图搞清楚,但我认为所有解决方案都很难看并且代码很差。
以下是为那些不理解的人提供的服务图片:
这基本上是迄今为止所有内容的代码:
<?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>
答案 0 :(得分:1)
下拉列表应命名为“rule [0]”和“ruleOrder [0]”,而不是“firstRule”和“firstRuleOrder”。然后使用增加的数组索引复制它们(您可以使用JavaScript执行此操作,或只显示有列的数量)。
要构建对array_multisort
的调用,您必须迭代$_POST['rule']
和$_POST['ruleOrder']
并创建一个参数数组。然后实际的函数调用发生在call_user_func_array
(这是必要的,因为你事先不知道参数的数量)