2016-11-22 44 views
1

多維數組我有這樣的數組:篩選到PHP

$bookings[] = array(
    'booking_id' => '1', 
    'client_firstname' => 'Gareth', 
    'days' => array(
     array('day_id' => '2016-11-23,2016-11-24', 'room_id' => '2'), 
     array('day_id' => '2016-11-25', 'room_id' => '4'), 
     array('day_id' => '2016-11-26,2016-11-27,2016-11-28', 'room_id' => '2'), 
    ) 
); 
$bookings[] = array(
    'booking_id' => '2', 
    'client_firstname' => 'James', 
    'days' => array(
     array('day_id' => '2016-11-25,2016-11-26,2016-11-27,2016-11-28', 'room_id' => '5') 
    ) 
); 
$bookings[] = array(
    'booking_id' => '2', 
    'client_firstname' => 'Marco', 
    'days' => array(
     array('day_id' => '2016-11-24', 'room_id' => '5') 
    ) 
); 

我怎樣才能循環到這個獲得與days[]等於當前日期或我想日後的第一個項目的項目嗎?

例如,如果我們是2016-11-23,我需要得到第一個項目到這是數組:

$bookings[] = array(
    'booking_id' => '1', 
    'client_firstname' => 'Gareth', 
    'days' => array(
     array('day_id' => '2016-11-23,2016-11-24', 'room_id' => '2') 
    ) 
); 

因爲進入days陣列,它與我搜索2016-11-23之日算起。

謝謝。

回答

0

您的要求有點不清楚,但array_filter是你想要的。它需要一個回調函數,您可以使用它來詢問外部數組中的每個項目。如果你從這個函數返回一些真實的東西,那麼數組項就包含在過濾數組中。如果您返回錯誤的內容,則會從已過濾的數組中排除數組項目。

下面的粗糙示例,基於我認爲你所要求的。如果它錯了,它應該給你正確的想法來調整它。

<?php 
$filtered = array_filter($bookings, function($item) { 
     $days = explode(',', $item['days'][0]['day_id']); 

     return $days[0] == '2016-11-23'; 
}); 

var_dump($filtered); 

我建議你也加入一些理智檢查,這對避免不良數據的事件錯誤。

0

這將讓預訂陣列相匹配的日期你提供

<?php 
    $day_value = '2016-11-23'; 
    $bookings_ = array(); 
    foreach($bookings as $b){ 
     foreach($b['days'] as $day){ 
      if(in_array($day_value,explode(',',$day['day_id']))){ 
      $bookings_[] = $b; 
      } 
     } 
    } 
    var_dump($bookings_); 
+0

嗯,我得到真正的所有日期與您的代碼。我只需要從當前日期開始獲取'days []'行。我認爲我們需要在這裏。 – popol

+0

如果我使用'2016-11-25',它應該給我兩個預訂(ids 1和2)。 – popol

+0

查看更新後的答案; – ksealey