搜索PHP数组的所有级别

时间:2016-03-31 05:44:51

标签: php arrays

道歉,如果这是一个重复的问题,我不熟悉我试图实现的确切术语,因此到目前为止我找不到答案。我对这些东西非常环保,以下是通过反复试验产生的 - 而不是因为我对任何幻想都是正确的。

这是我想要实现的目标:

  1. 使用textarea,客户输入自定义开放时间(每行一个):日期(名称),日期,状态(打开或关闭),开放时间,结束时间。例如:2016-12-25圣诞节,关闭'或者'节礼日,2016-12-26,开放,8:00,17:00'。
  2. 此textarea内容按新行拆分为数组,然后再用逗号分隔。
  3. 使用这些数组,搜索日期是否为今天的日期,如果是,则显示阵列中的更多内容(如该特定日期的开放时间),或者 - 如果没有匹配 - 显示常规开放时间(已在其他地方设置)。
  4. 我到目前为止所做的事情(请注意,我已经检索了$ 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,那么一切都很棒,它会继续显示节礼日开放时间。

    但如果今天的$ date是2016-12-25那么 - 即使有特定于此日期的信息 - 没有任何反应,因为我的if语句中的$ key仅检查节礼日数组信息。这意味着继续检查其余部分(无论是开放还是关闭等)是多余的,因为它甚至没有使日期正确。

    我的(啰嗦)问题是:我可以使用什么代替$ array [$ key] [1]来搜索所有数组级别以找到最后一个匹配[1]?或者我是从完全错误的角度来看待它?

    如果可以,请帮帮我,我拔头发因为我不知道正确的搜索条件。如果您需要,请尽快提供更多详细信息。

    提前谢谢。

1 个答案:

答案 0 :(得分: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
}