2016-03-31 90 views
0

道歉,如果這是一個重複的問題,我不熟悉我正在嘗試實現的確切術語,因此我一直未能成功搜索答案。我對這些東西非常青睞,以下是通過反覆試驗得出的結論 - 不是因爲我有任何幻想,認爲它是正確的。搜索PHP陣列的所有級別

這裏就是我想要實現:

  1. 使用textarea的,客戶輸入定製的開放時間(每行一個):天(名稱),日期,狀態(開或關),開標時間, 關閉時間。例如:「聖誕節,2016-12-25,關閉」或「節禮日,2016-12-26,開放,8:00,17:00」。
  2. 這個textarea內容被新行分割成一個數組,然後再用逗號分割。
  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已根據我的時區設置爲當天日期),那麼它只搜索最後一個數組,節禮日信息。所以如果$日期是2016-12-26,那麼一切都很好,它會繼續並顯示節禮日的開放時間。

但是,如果今天的$ date是2016-12-25那麼即使有特定於此日期的信息也不會發生,因爲我的if語句中的$ key僅檢查「節禮日」數組信息。這意味着繼續檢查其餘部分(無論是開放的還是封閉的等)是多餘的,因爲它甚至沒有獲得正確的日期。

我的(囉嗦)問題是:爲了搜索所有數組級別以找到匹配的最後一個[1],我可以用什麼來代替$ array [$ key] [1]?還是我從完全錯誤的角度來看它?

請幫助我,如果可以的話,我拉我的頭髮,因爲我不知道正確的術語來搜索。如果您需要,歡迎提供更多細節。

預先感謝您。

+0

嘗試使用'for'或'foreach'循環 – Nehal

+0

@tms,如果答案適合您,請接受它。如果沒有,請添加評論關於還有什麼可能是一個因素或考慮 – paulski

回答

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 
} 
+0

我猜這'$ custom_date = explode(',',$ custom_date_string);'應該在foreach – Nehal

+0

@ Ms.Nehal - 我不明白你的評論。您甚至無法訪問foreach循環範圍之外的$ custom_date_string變量。你能詳細說明嗎? – paulski

+0

謝謝@pdom - 這真的讓我朝着正確的方向前進,一切都按我需要的方式工作。 如果您有時間,如果您可以簡要說明您的解決方案,我會非常感激,所以我可以弄清楚爲什麼爆炸對我的行爲有不同的表現(除了外觀上的明顯差異)? 再次感謝。 :) – tms