2013-03-05 98 views
0

我的目标是从Google日历获取2个数组1,并从Google Spread工作表获取另一个数组。数组的格式都是相同的,只是Calendar数组有一个ID字段。将2个多维数组与php比较

我的多维谷歌试算表数组包含了一些列的,看起来像:

array (
'startDate' => '2013-03-29', 
'endDate' => '2013-03-29', 
'startTime' => '08:00', 
'endTime' => '20:00', 
'title' => 'Ext2 Joe', 
) 

我的多维谷歌日历数组包含了一些列的样子:

array (
'startDate' => '2013-03-29', 
'endDate' => '2013-03-29', 
'startTime' => '08:00', 
'endTime' => '20:00', 
'title' => 'Ext2 Joe', 
'id' => 'enmjke5qpjs41q93vi8tibp85k', 
) 

下面是代码我在用。它错过了很多在两者中都存在的事件。我一直在努力解决这个问题,并以不同的方式重新设置它的格式,似乎无法让它删除重复项,只留下一个包含剩余内容的数组$final_array。因此,我可以将这些作品添加到Google日历中,因为它们尚不存在。

$k=0; 
$match=0; 
$remove_events=array_values($all_events); 
$add_final_array=$final_array; 
foreach($final_array as $array_final) 
{ 

$h=0; 

foreach ($all_events as $loop_all_events) 
{ 
     if ($array_final["startDate"]==$loop_all_events["startDate"]){ 
      if ($array_final["endDate"]==$loop_all_events["endDate"]) { 
       if ($array_final["title"]==$loop_all_events["title"]) { 
        if($array_final["startTime"]==$loop_all_events["startTime"]) 
{ 


       unset($add_final_array[$k]); 
       unset($remove_events[$h]); 
       $remove_events=array_values($remove_events);      
       $match++; 
      } } } } 



$h++;   
} 


$k++;      

} 
+0

你尝试[和array_diff(http://www.php.net/manual/en/function.array-diff.php)?或者如果将它们合并在一起会发生什么?会不会有你关心的冲突数据?或者你只是想将其中一个合并到另一个? – mkaatman 2013-03-05 20:19:13

+0

我尝试了数组比较,但它没有找到匹配。我将数组diff放在foreach中($ all_events作为$ loop_all_events),并将$ loop_all_events与$ array_final进行比较,但它是空的。当我试图print_r的结果。 – 2013-03-05 20:23:26

+0

我想为什么数组差异不起作用的部分原因是我没有一套独特的数据进行比较。我是否需要比较数组中的所有4个元素来查看它是否是唯一的。这或我有不正确的格式,我尝试了几种方法。 – 2013-03-05 20:26:08

回答

0
<?php 
$array1 = array (
'startDate' => '2013-03-29', 
'endDate' => '2013-03-29', 
'startTime' => '08:00', 
'endTime' => '20:00', 
'title' => 'Ext2 Joe', 
); 

$array2 = array (
'startDate' => '2013-03-29', 
'endDate' => '2013-03-29', 
'startTime' => '08:00', 
'endTime' => '20:00', 
'title' => 'Ext2 Joe', 
'id' => 'enmjke5qpjs41q93vi8tibp85k', 
); 

    $diff = my_array_diff($array1, $array2); 
    echo '<pre>'; 
    print_r($diff); 

    function my_array_diff($array1, $array2){ 
    $diff1 = array_diff_assoc($array1, $array2); 
    $diff2 = array_diff_assoc($array2, $array1); 
    $diff = array_merge($diff1, $diff2); 

    return $diff; 

    } 
?> 

输出:

Array 
(
    [id] => enmjke5qpjs41q93vi8tibp85k 
) 
+0

我比较的数据是开始时间,停止时间,开始日期和标题。该id只是谷歌日历的ID,如果我需要删除该事件,那么这就是我使用的ID。所以我知道只会存在于一个数组中。我无法正确地比较第一个多维数组中的每个数组,而第二个多维数组中的每个数组忽略了id字段,因为它只在一个数组中。我列出了各个数组的合成多维数组中的众多元素之一,所以每个人都可以看到我的格式是如何。 – 2013-03-05 20:28:59

+0

你可以在函数中取消设置id,然后将它们进行比较...... – 2013-03-05 20:32:02

+0

不是我所需要的,因为我已经取消了设置ID,但是我能够得到它的工作,谢谢。 – 2013-03-06 16:15:02