在PHP中过滤多维数组
我有一个包含我的预订的数组:在PHP中过滤多维数组,php,arrays,Php,Arrays,我有一个包含我的预订的数组: $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', 'r
$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')
)
);
数组的解释:
- 该数组显示
和booking\u id
client\u name
- 数组
包含客户在酒店的日程安排。此days
数组中的每个数组都解释了客户端所在的日期和房间。如果我有一条以上的线路,客户可以换房间days
愿望 对于我给出的日期,我需要在
days数组中获得预订,其中第一个日期对应于我给出的日期
例子
- 我给出的日期是2016年11月25日
- 我需要得到:
$bookings[]=数组(
'预订id'=>'1',
“客户名”=>“Gareth”,
“天”=>数组(
数组('day\u id'=>'2016-11-25','room\u id'=>'4')
)
);
$bookings[]=数组(
'预订id'=>'2',
“客户名”=>“詹姆斯”,
“天”=>数组(
阵列('day_id'=>'2016-11-252016-11-262016-11-272016-11-28','room_id'=>'5')
)
);代码>
我所尝试的
但它会将所有结果返回到预订中
你能帮帮我吗
谢谢。你认为什么是$day['day\u id'][0]
它是$day['day\u id']
的第一个符号,因为后者是一个字符串。因此,在$day['day\u id'][0]
中,不会分解任何内容。解决方法是删除[0]
:
foreach($bookings as $b){
foreach($b['days'] as $day){
if(in_array($day_value,explode(',',$day['day_id']))){
// this string added:
$b['days'] = $day;
$bookings_[] = $b;
// btw, if your `$b['days']` has several elements
// and in a couple of them there's a required date
// then `$b` will be added to `$bookings_` several
// times, so probably you need `break`
// break;
}
}
}
从$day['day\u id'][0]
中删除[0]
,您的示例代码对我有效。不,如果我删除[0],我将拥有days数组的所有数组,而我只需要第二个数组。因此,您希望添加以下行:$b['days']=$day$预订量[]=b美元;中断代码>对吗?不,如果我删除[0]
,我将拥有天
数组的所有数组,而我只需要第二个数组。第二个什么?检查我在问题中编写的所需示例。告诉我你明白$day['day\u id'][0]
不是带逗号的字符串
foreach($bookings as $b){
foreach($b['days'] as $day){
if(in_array($day_value,explode(',',$day['day_id']))){
// this string added:
$b['days'] = $day;
$bookings_[] = $b;
// btw, if your `$b['days']` has several elements
// and in a couple of them there's a required date
// then `$b` will be added to `$bookings_` several
// times, so probably you need `break`
// break;
}
}
}