【发布时间】:2009-02-02 19:50:20
【问题描述】:
我正在构建一个表单来执行以下操作:
- 打印用户和权限表,从 MySQL 中提取。用户拥有的每个权限都是一个复选框,而他们缺少的每个权限都是一个未选中的复选框。
- 允许管理员选中和取消选中复选框以授予或删除权限。
- 提交表单后,仅显示将更改权限的用户的确认页面,突出显示具体更改。
- 确认更改后,相应地修改数据库。
为此,我创建了两组用户权限:一组根据数据库显示的内容,另一组根据表单显示的内容。
如果用户在 MySQL 中缺少权限,它将显示为 0。如果他们在表单提交中缺少权限,则根本不存在。
这里有两个简单的数组示例:
数据库数组
[用户 1] => 数组([公共] => 1 [私人] => 1 [秘密] => 1 ) [用户2] => 数组([公共] => 1 [私人] => 0 [秘密] => 0 )表单提交数组(撤销User1的“秘密”,交给User2)
[用户 1] => 数组([公共] => 1 [私人] => 1 ) [用户2] => 数组([公共] => 1 [秘密] => 1 )问题
我怎样才能优雅地组合这两个数组来做一个“改变”数组,这样:
- 忽略两者具有相同权限的用户
- 其余用户拥有所有权限 - 公开、私有和秘密 - 设置为 0 或 1。
- 如果表单提交数组中缺少每个权限,则为 0,如果在表单提交数组中,则为 1
例如,结合以上将得到:
[用户 1] => 数组([公共] => 1 [私人] => 1 [秘密] => 0 ) [用户2] => 数组([公共] => 1 [私人] => 0 [秘密] => 1 )目前的尝试
- 作为第一步,我尝试将 array_merge() 与第二个列出的表单数组一起使用,认为它会覆盖它们不同的数据库数组。相反,它删除了不同的元素。
- 我曾尝试设置一个foreach() 语句来比较两个数组,但它变得复杂了,我认为必须有更简单的方法
更新
哇!一个新的答案把我的注意力拉回到这个老问题上。我得到了这个工作,但后来我放弃了这个疯狂的代码 - 它太复杂了,无法回去使用。相反,我编写了一个 PHP 后端脚本来一次更改一个权限,然后编写了一个 AJAX 前端来发送更改。更简单的代码,并且更改对用户来说是即时的。突出显示效果会在页面上提供有关更改内容的即时反馈。
【问题讨论】: