我正在构建一个表单来执行以下操作:
- 打印从 MySQL 获取的用户和权限表。用户拥有的每一项权限都是一个复选框,而他们缺少的每一项权限都是一个未选中的复选框。
- 允许管理员选中和取消选中复选框以授予或删除权限。
- 提交表单后,显示一个确认页面,其中仅包含权限将被更改的用户,并突出显示特定更改。
- 确认更改后,相应地修改数据库。
为此,我创建了两个用户权限数组:一组根据数据库显示的内容,一组根据表单显示的内容。
如果用户在 MySQL 中缺少权限,则会显示为 0。如果在表单提交中缺少权限,则该权限将不存在。
以下是数组的两个简单示例:
数据库数组
[User1] => Array ([public] => 1
[private] => 1
[secret] => 1
)
[User2] => Array ([public] => 1
[private] => 0
[secret] => 0
)
表单提交数组(撤销User1的“秘密”并将其交给User2)
[User1] => Array ([public] => 1
[private] => 1
)
[User2] => Array ([public] => 1
[secret] => 1
)
Question
我怎么能够优雅地组合这两个数组制作一个“更改”数组,这样:
- 两者具有相同权限的用户将被省略
- 其余用户拥有所有权限 - 公共、私有和秘密 - 设置为 0 或 1。
- 如果表单提交数组中缺少每个权限,则该权限为 0;如果表单提交数组中存在该权限,则该权限为 1
例如,结合以上将给出:
[User1] => Array ([public] => 1
[private] => 1
[secret] => 0
)
[User2] => Array ([public] => 1
[private] => 0
[secret] => 1
)
迄今为止的尝试
- 作为第一步,我尝试将 array_merge() 与第二个列出的表单数组一起使用,认为它会覆盖它们不同的数据库数组。相反,它删除了不同的元素。
- 我尝试设置一个 foreach() 语句来比较两个数组,但它变得很复杂,我认为必须有一个更简单的方法
UPDATE
哇!一个新的答案让我的注意力又回到了这个老问题上。我得到了这个工作,但后来我废弃了这个疯狂的代码 - 它太复杂了,无法返回并使用。相反,我编写了一个 PHP 后端脚本来一次更改一个权限,然后编写了一个 AJAX 前端来发送更改。代码更加简单,并且更改对于用户来说是即时的。突出显示效果可提供有关更改内容的即时页面反馈。
这可能就是您正在寻找的:array_diff() http://php.net/manual/en/function.array-diff.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)