很抱歉,如果这是一个重复的问题,我不熟悉我想要实现的目标的确切术语,所以到目前为止我一直没有找到答案。我对这些东西很熟悉,下面的事情是经过反复尝试的——并不是因为我对它是正确的抱有任何幻想。
以下是我正在努力实现的目标:
- 使用文本区域,客户端输入自定义的开放时间(每行一个):日期(名称)、日期、状态(开放或关闭)、开放时间、关闭时间。例如:"圣诞节,2016-12-25,关闭"或"节礼日,2016-12-26,开放,8:00,17:00"
- 此文本区域内容按新行拆分为一个数组,然后再按逗号拆分
- 使用这些数组,搜索日期是否为今天的日期,如果是,则显示数组中的更多内容(如特定日期的开放时间),或者,如果没有匹配,则显示常规开放时间(已在其他地方设置)
到目前为止,我得到了什么(注意,我已经检索到$custom_dates变量内容):
$array = array();
$array = preg_split('/'R/', $custom_dates); /* split by line break */
foreach($array as $key => $custom_dates) {
$array[$key] = explode(',', $custom_dates); /* split again by comma */
};
这会返回以下数组(根据客户的需要,也可以更长或更短):
Array
(
[0] => Array
(
[0] => Christmas Day
[1] => 2016-12-25
[2] => closed
)
[1] => Array
(
[0] => Boxing Day
[1] => 2016-12-26
[2] => open
[3] => 8:00
[4] => 17:00
)
)
我正在努力解决的问题是如何在所有数组中搜索特定的日期匹配。如果我使用If($array[$key][1]=$date)(其中$date已经根据我的时区设置为今天的日期),那么它只搜索最后一个数组,在这种情况下是节礼日信息。因此,如果$date是2016-12-26,那么一切都很好,它将继续显示节礼日的开幕时间。
但是,如果今天的$日期是2016-12-25,那么即使有特定于该日期的信息,也不会发生任何事情,因为我的if语句中的$键只检查节礼日数组信息。这意味着继续检查其余部分(无论是打开的还是关闭的,等等)是多余的,因为它甚至没有得到正确的日期。
我(长篇大论)的问题是:为了搜索所有数组级别以找到最后[1]的匹配项,我可以使用什么来代替$array[$key][1]?或者我是从一个完全错误的角度来看待它的?
如果可以的话,请帮帮我,我很生气,因为我不知道该搜索什么词。如果您需要,很乐意提供更多详细信息。
提前谢谢。
您可以在已经创建的foreach循环中实现这一点。
$array = preg_split('/'R/', $custom_dates); /* split by line break */
foreach ($array as $key => $custom_date_string) {
$custom_date = explode(',', $custom_date_string);
if ($custom_date[1] === $today) {
// do stuff
}
$array[$key] = $custom_date; // if you still need this
}