[英]Filter into a multidimensional array in 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
的日期開始。
謝謝。
您的要求有點不清楚,但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);
我建議你也加入一些健全性檢查,以避免數據不良時出錯。
這將使預訂數組與您提供的日期相匹配
<?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_);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.