2017-08-27 36 views
0

我有一個合適的預訂時間數組和另一個多維數組,其中包含每個日期已經預訂的時間數組。我想迭代每個日期併爲每個日期構建另一個單獨的多維數組,這些日期包含第一個數組中可自由訂閱的時間。PHP多維數組根據索引數組比較並刪除值

$times = array("9:00", "10:00", "11:00", "12:00", "13:00"); 

$dates = array(
      "28/07/2018" => array("10:00", "11:00"), 
      "29/07/2018" => array("10:00", "13:00"), 
      "30/07/2018" => array("11:00", "13:00")); 



// function to remove duplicates 
function myArrayDiff($array1, $array2) { 
    // loop through each item on the first array 
    foreach ($array1 as $key => $row) { 
     // loop through array 2 and compare 
     foreach ($array2 as $key2) { 
      if ($row['id'] == $key2) { 
       // if we found a match unset and break out of the loop 
       unset($array2[$key2]); 
       break; 
      } 
     } 
    } 

    return array_values($array2); 
} 

$array3 = myArrayDiff($dates, $times); 

print_r($array3); 
+0

究竟是什麼問題,你需要幫助?它不清楚你的問題。 – FluffyKitten

+0

當你有一個縮進的代碼塊時,不需要用反引號('\'')把它括起來。事實上,反引號包含在你的代碼塊中,並且可以輕鬆搞定語法突出顯示。 – Chris

回答

0

提供的函數顯然是從某處複製過來的,並且不會與給定的數據一起工作。所有你需要做的就是每天DIFF次(迭代天,並做DIFF與和array_diff)

$times = array("9:00", "10:00", "11:00", "12:00", "13:00"); 
$dates = array(
      "28/07/2018" => array("10:00", "11:00"), 
      "29/07/2018" => array("10:00", "13:00"), 
      "30/07/2018" => array("11:00", "13:00")); 

$filtered = []; 
foreach($dates as $day => $taken_times) { 
    $filtered[$day] = array_values(array_diff($times, $taken_times)); 
} 

print_r($filtered); 
0

我不完全相信你之後,因爲它並不完全清楚是什麼,所以我做了這裏有一些假設。

我假設你想獲得第一個數組中首選的時間(小時)數組,並創建一個像第二個數組一樣的新數組,以匹配可用的小時數。

注:我在這裏使用較新的PHP數組語法,因爲它比較老的php的醜陋array()語法更好。

$preferred = [ 
    "9:00", 
    "10:00", 
    "11:00", 
    "12:00", 
    "13:00" 
]; 

$available = [ 
    "28/07/2018" => [ 
     "10:00", 
     "11:00" 
    ], 
    "29/07/2018" => [ 
     "10:00", 
     "13:00" 
    ], 
    "30/07/2018" => [ 
     "11:00", 
     "13:00" 
    ] 
]; 

$dates = array_keys($available); 
$ideal = []; 
// create an ideal array keyed by the available dates with empty array as values for now. 
// useless now, but useful later. 
foreach ($dates as $date) { 
    $ideal[$date] = []; 
} 
foreach ($available as $date => $hours) { 
    foreach ($hours as $hour) { 
     if (in_array($hour, $preferred) === true) { 
      $ideal[$date][] = $hour; 
     } 
    } 
} 

print_r($ideal); 

我確定有更有效的方法來做到這一點,但我認爲這是相當可讀的。

希望有所幫助。如果我誤解了你想要的東西,你能澄清一下嗎?