2014-11-21 57 views
0

我設計了用於預定房間並通過多維數組形式存儲數據的系統。 現在我想編寫有關查找在時間和日期(從,到,日期)上覆制的數組值的函數。使用PHP檢查並刪除多維數組中的數組值使用PHP

邏輯是一個房間可以預訂一次或更多的一天,但它不能由一個或多個用戶在同一時間預訂。例如,約翰在2014年8月15日預訂了1300-1500,所以沒有人可以在此期間再預訂。

我不知道如何實現關於刪除這些值,雖然我可以理解邏輯的函數。

這裏是陣列(數據):

$recordBooking = array(
      "112"=>array(
       "date"=>array(
        "24/09/2014"=>array(
         array(
          "from"=>1, 
          "to"=>3, 
          "username"=>"Amy" 
           ), 
         array( //duplicate data 
          "from"=>2, 
          "to"=>5, 
          "username"=>"John" 
           ) 
         ), 
        "27/09/2014"=>array(
         array(
          "from"=>1, 
          "to"=>3, 
          "username"=>"Chars" 
           ) 
         ), 
        "29/09/2014"=>array(
         array(
          "from"=>1, 
          "to"=>5, 
          "username"=>"Peter" 
           ) 
         ), 
        "30/09/2014"=>array(
         array(
          "from"=>3, 
          "to"=>6, 
          "username"=>"Amy" 
           ) 
         ) 
        ) 
       ) 
     ); 

欲設置警報消息,並刪除其是當檢測到重複數據的功能重複的值。謝謝你的幫助。

回答

0

對於數組濾波,有一個array_filter功能發明。我們假設您已經在迭代日期:

$booked = []; // holder for already booked 
$result = array_filter(
    $recordBooking['112']['date']['24/09/2014'], // array value when iterating dates 
    function($rb) use (&$booked) { // will filter this date 

    foreach($booked as $b) { 
     if(
     ($b['from'] < +$rb['from'] && $b['to'] > +$rb['from']) || 
     ($b['from'] < +$rb['to'] && $b['to'] > +$rb['to']) 
    ) { // already booked!!! 
     echo "ALERT. Skipped: ${rb['username']}\n"; 
     return false; 
     } 
    } 
    $booked[] = ['from' => +$rb['from'], 'to' => +$rb['to'] ]; // mark time as booked 
    return true; 
    } 
); 

var_dump($result); 

// ⇒ 
/* 
ALERT. Skipped: John 
array(1) { 
    [0]=> 
    array(3) { 
    ["from"]=> 
    int(1) 
    ["to"]=> 
    int(3) 
    ["username"]=> 
    string(3) "Amy" 
    } 
} 
*/ 

希望它有幫助。

+0

感謝您的幫助......是否有可能使用if子句和For-loop來實現檢查重複數據的函數?我是一名PHP初學者,所以我想很容易理解,我不想只找到解決方案。非常感謝你。 – 2014-11-21 07:09:15

+0

這偶爾不是一個教我請教的網站。順便說一句,無論你真的想學習PHP,你應該嘗試理解提供的代碼 - 可能會給出+100 exp,而使用for-loops和if-clause編碼導致只寫意大利麪代碼。 – mudasobwa 2014-11-21 08:48:53