我搜索并尝试了Google的许多解决方案,例如array_diff
,array_intersect
和array_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
失败。
请帮忙
答案 0 :(得分:1)
假设您有两个数组$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
将返回包含三个元素[2, 5, 6]
的数组。这意味着用户完全更改了区域。