繁体   English   中英

比较两个数组的值以获取更改日志

[英]compare the values of two array for change log

我搜索,从谷歌尝试了许多解决方案,如array_diffarray_intersectarray_map但不知何故,我无法得到我正在寻找的结果。

让我分享一些例子和我想要的。

在编辑用户页面上:

A部分:以前,管理员已为此用户选择$regions=[5,6,2] ,现在管理员选择了$regions=[2,6,7]

我想发送一封电子邮件,通知您您所在地区有变化,列出以前的地区,如果有变化,这些就是新的地区!

B部分:如果没有如下所示的更改,则没有电子邮件

`$regions_old=[5,6,2]`
`$regions_new=[2,6,5]`

C部分:

$regions_old=[5] $regions_new=[2,6,5]

D部分:

$regions_old=[2,5,6] $regions_new=[2]

如果有任何更改,我需要两个带有旧区域和新区域列表的数组。 我尝试计数两个数组,但在这种情况下, Section B失败。

任何帮助请

假设您有两个数组$regions_old$regions_new ,则可以通过创建两个利用array_diff来确定数组更改的变量来获得所需的内容。

进一步来说:

$regions_added = array_diff($regions_new, $regions_old);

$regions_removed = array_diff($regions_old, $regions_new);

以下方案可用于测试上述逻辑:

情况1:区域相同

$regions_old = [5, 6, 2];

$regions_new = [2, 6, 5];

在这种情况下, $regions_added$regions_removed都将返回空数组,因此未进行任何更改。

情况2:已添加区域

$regions_old = [5];

$regions_new = [2, 6, 5];

$regions_added将返回一个包含两个元素[2, 6]的数组,而$regions_removed将返回一个空数组。 这意味着,用户向现有的$regions_old添加了两个额外的区域。

情况3:区域已被删除

$regions_old = [2, 5, 6];

$regions_new = [2];

$regions_added将返回一个空数组,而$regions_removed将返回一个包含两个元素的数组[5, 6] 这意味着用户从已经存在的$regions_old删除了两个区域。

情况4:区域已完全更改

$regions_old = [2, 5, 6];

$regions_new = [4, 1, 3];

$regions_added将返回具有三个元素[4, 1, 3] $regions_removed [4, 1, 3]的数组,而$regions_removed将返回具有三个元素[2, 5, 6] $regions_removed [4, 1, 3]的数组。 这意味着,用户完全更改了区域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM