2013-03-05 2 views
0

Моя цель - взять 2 массива 1, следующих из Календаря Google, другого из листа Google Spread. Массивы отформатированы одинаково, за исключением того, что в массиве Calendar есть поле ID.Сравните 2 многомерных массива с php

Мой многомерный массив Google Spread Sheet содержит ряд массивов, который выглядит как:

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

Мой многомерный массив Календарь Google содержит ряд массивов выглядит следующим образом:

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

+0

Я попробовал массив diff, но он не совпал. Я поместил массив diff внутри foreach ($ all_events как $ loop_all_events) и сравнил $ loop_all_events с $ array_final, но он оказался пустым. Когда я попытался напечатать_r результат. –

+0

Я думаю, что часть аргумента array diff не работала, потому что у меня не было единственного набора уникальных данных для сравнения. Если мне нужно сравнить все 4 элемента в массиве, чтобы увидеть, является ли он уникальным. Это или я неправильно сформулировал это, я попробовал пару способов. –

ответ

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

Данные, которые я сравниваю, - это время начала, стоп-время, начало и название. Идентификатор - это только идентификатор из календаря Google, который, если мне нужно удалить событие, то это идентификатор, который я использую. Так что, я знаю, будет существовать только в одном массиве. Я не могу заставить его правильно сравнивать каждый массив в 1-м многомерном массиве каждый массив во втором многомерном массиве, игнорируя поле id, так как он находится только в одном массиве. Я перечисляю формулу отдельных массивов, которые просто один из многих в многомерных массивах, чтобы каждый мог видеть, как мой формат. –

+0

вы можете отключить идентификатор внутри функции, а затем сравнить их ... – 2013-03-05 20:32:02

+0

Не совсем то, что мне нужно, поскольку я уже отключил идентификатор, но я смог заставить его работать спасибо. –