搜索PHP数组的所有级别


Search through all levels of a PHP array

很抱歉,如果这是一个重复的问题,我不熟悉我想要实现的目标的确切术语,所以到目前为止我一直没有找到答案。我对这些东西很熟悉,下面的事情是经过反复尝试的——并不是因为我对它是正确的抱有任何幻想。

以下是我正在努力实现的目标:

  1. 使用文本区域,客户端输入自定义的开放时间(每行一个):日期(名称)、日期、状态(开放或关闭)、开放时间、关闭时间。例如:"圣诞节,2016-12-25,关闭"或"节礼日,2016-12-26,开放,8:00,17:00"
  2. 此文本区域内容按新行拆分为一个数组,然后再按逗号拆分
  3. 使用这些数组,搜索日期是否为今天的日期,如果是,则显示数组中的更多内容(如特定日期的开放时间),或者,如果没有匹配,则显示常规开放时间(已在其他地方设置)

到目前为止,我得到了什么(注意,我已经检索到$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
}