例如我正在使用foreach迭代类槽 像
foreach ($result as $timeslot) {
$time=strtotime($timeslot);
$endTime = date("h:i A", strtotime('+' . $duration . ' minutes', $time));
echo date('h:i', strtotime($timeslot)) . '- ' . date('h:i A', strtotime($endTime));
}
我有另一个数组foreach,它遍历progn_slot,如
foreach($booked_slot as $slot){
$slot=strtotime($slot['start_time']);
echo "slot<br>";
}
var_dump
$booked_slot
的结果如下:
[0]=>
object(app\modules\admin\models\OrderItem)#195 (10) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(10) {
["id"]=>
int(128)
["user_id"]=>
int(73)
["location_id"]=>
int(2)
["instructor_id"]=>
int(16)
["order_id"]=>
int(54)
["cd_id"]=>
int(7)
["price"]=>
string(6) "300.00"
["date"]=>
string(10) "2018-04-12"
["start_time"]=>
string(8) "10:45:00"
["end_time"]=>
string(8) "10:55:00"
}
$ result的var_dump
结果就像
array(14) {
[0]=>
string(8) "10:05:00"
[1]=>
string(8) "10:15:00"
[2]=>
string(8) "10:25:00"
[3]=>
string(8) "10:35:00"
[4]=>
string(8) "10:45:00"
[5]=>
string(8) "10:55:00"
[6]=>
string(8) "11:05:00"
[7]=>
}
我想要的是$ result是否具有匹配值
$booked_slot[0]['start_time']
然后从$result
要实现这一个选项我尝试过就像
if(strtotime($timeslot) != $slot)
部分原因在于$result
中只有一个值可以查找,但如果它有多个值,则只适用于最后一个值。
生成对象数组的查询如下:
$class_duration = ClassDuration::find()->where(['instructor_id' => $values['id']])->andwhere($cond)->all();
$booked_slot = OrderItem::find()->where(['instructor_id' => $values['id'],'date' =>$datec])->andwhere($cond)->all();
答案 0 :(得分:1)
在foreach()
$booked_slot
周围,每次迭代时都会覆盖$slot
值。因此,只存储最后一个值。
您可以创建一个数组来存储所有值,并使用in_array()
检查$timeslot
是否在内:
$slots = [];
foreach($booked_slot as $slot){
$slots[] = strtotime($slot['start_time']);
}
并检查:
if (!in_array(strtotime($timeslot), $slots)) {
// $timeslot is not in $slots.
}
答案 1 :(得分:1)
最简单的方法是将所有预订的插槽放入一个数组中,以便检查此数组中是否存在时隙。
<?php
$slot_array = array();
foreach($booked_slot as $slot){
$slot_array[]=strtotime($slot['start_time']);
echo "slot<br>";
}
?>
和
<?php
if(!in_array(strtotime($timeslot), $slot_array)){
// not booked yet
}
?>