php - 比较两个关联二维数组之间的差异,并在用默认值填充一个数组后,丢弃没有差异的行

标签 php arrays multidimensional-array default-value array-difference

我正在构建一个表单来执行以下操作:

  • 打印从 MySQL 获取的用户和权限表。用户拥有的每一项权限都是一个复选框,而他们缺少的每一项权限都是一个未选中的复选框。
  • 允许管理员选中和取消选中复选框以授予或删除权限。
  • 提交表单后,显示一个确认页面,其中仅显示权限将发生更改的用户,并突出显示具体更改。
  • 确认更改后,相应地修改数据库。

为此,我创建了两个用户权限数组:一组根据数据库显示的内容,另一组根据表单显示的内容。

如果用户在 MySQL 中缺少权限,则会显示为 0。如果在表单提交中缺少权限,则该权限将不存在。

以下是数组的两个简单示例:

数据库数组

[User1] => Array ([public] => 1
                [private] => 1
                [secret] => 1
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 0
               )

表单提交数组(撤销User1的“ secret ”并将其交给User2)

[User1] => Array ([public] => 1
                [private] => 1 
               )

[User2] => Array ([public] => 1
                  [secret] => 1
                 )

问题

我如何优雅地组合这两个数组来制作一个“更改”数组,这样:

  • 省略两者具有相同权限的用户
  • 其余用户拥有所有权限(公开、私有(private)和 secret ),设置为 0 或 1。
  • 如果表单提交数组中缺少每个权限,则该权限为 0;如果表单提交数组中存在该权限,则该权限为 1

例如,结合以上内容将得到:

[User1] => Array ([public] => 1
                [private] => 1
                [secret] => 0
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 1
               )

到目前为止的尝试

  • 作为第一步,我尝试使用 array_merge() 和第二个列出的表单数组,认为它会覆盖它们不同的数据库数组。相反,它删除了不同的元素。
  • 我尝试过设置一个 foreach() 语句来比较两个数组,但它变得很复杂,我认为必须有一个更简单的方法

更新

哇!一个新的答案让我的注意力又回到了这个老问题上。我得到了这个工作,但后来我废弃了这个疯狂的代码 - 它太复杂了,无法返回并使用。相反,我编写了一个 PHP 后端脚本来一次更改一个权限,然后编写了一个 AJAX 前端来发送更改。代码更加简单,并且更改对于用户来说是即时的。突出显示效果可提供有关更改内容的即时页面反馈。

最佳答案

帖子数据仅包含您应授予的权限。因此,设置一个“基线”,将所有权限设置为0。然后与提交合并。

$empty_perms = array("public" => 0, "private" => 0, "secret" => 0);

$new_user1_perms = array_merge($empty_perms, $_POST['User1']);
$new_user2_perms = array_merge($empty_perms, $_POST['User2']);

现在使用合并的数组更新数据库。这样您将为所有元素设置正确的权限。

关于php - 比较两个关联二维数组之间的差异,并在用默认值填充一个数组后,丢弃没有差异的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504616/

相关文章:

php - 无法使用 cassandra 和 php 创建键空间

php - CodeIgniter 或 PHP 在表名前添加 "sq",引发错误

php - 而 mysqli_fetch_assoc 在有列而不是行时工作

javascript - 根据另一个下拉列表填充一个下拉列表并获取 "value"而不是下拉列表显示值

java - 用数学序列填充数组

php - 将具有指定值的数组合并为一个键

c++ - 用于初始化多维数组的嵌套 initializer_list

python - 以特定方式迭代多维数组

php - 在 PDO 中将 1 行连接到多行

PHP:用逗号分隔数组