如何在PHP中同步两个数组?

时间:2011-06-13 03:31:23

标签: php arrays sync

有关一些背景信息,我正在尝试同步两个日历(其中一个是Google日历)

我正在使用这两个API从这两个日历中获取所有事件信息并将它们放入自己的数组中。所以这让我:

GoogleEventArray OtherEventArray

从长远来看,我想在两个阵列之间进行双向同步。但是,为了保持简单,我只想将OtherEventArray作为Master,将GoogleEventArray作为奴隶。

我不打算在每次运行脚本时删除整个Google日历并从OtherEventArray更新它,因为此脚本将在每分钟左右运行的cron作业上,以使Google日历保持最新状态。我只需要检查数组是否有变化或需要添加。

所以我只需要一些想法来获得同步这两个数组的最佳方法吗?

修改

也许更好的方法是找到这两个数组之间的不同,并将其添加到第三个数组,这样我就可以使用它来保存对谷歌日历的更改。

因为如果我只将两个数组合并为一个,我仍然需要将所有未更改的数据保存到Google日历中,从而导致不必要的工作量。

此外,我的两个数组中包含数据,因此您可以了解可以更改的内容,我需要检测标题,日期或描述中的更改

http://snipt.org/xXW

3 个答案:

答案 0 :(得分:0)

查看array_mergearray_merge_recursivearray_uintersect系列函数。您需要使用哪个取决于这些阵列的精确结构。

答案 1 :(得分:0)

你试过array_combine

您也可以添加数组:

$arrFirst = $arrSecond + $arrFirst

答案 2 :(得分:0)

如果您执行与

类似的操作,该怎么办?
$a1[md5("event")]
$a2[md5("event")]

“event”实际上是您为"event name"."event datetime"

等事件创建的字符串

如果您对两者使用相同的原则,那么当您通过合并方法或简单循环事件进行合并时,已经存在只会相互覆盖,或者您甚至可以检查它们是否已存在。

但有一件事是,这对单向同步很有用。如果您将事件的标题或事物甚至事件本身更改为不同的日期,那些冲突将覆盖它。但是,您可以更聪明地让您知道甚至检测到事件已被移动/编辑过。