2016-11-22 67 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