2013-10-02 51 views
0

如果我們的客戶服務聯繫中心關閉,我們需要在我們的網站上顯示消息。我正在清理檢查當前日是否爲假期的代碼。如何使用多維數組的foreach?

在過去,我爲每個假期使用了一個變量,每個假期使用了一個if語句。這是很多代碼,它看起來sl and不專業。我一直在閱讀多維數組,看起來這可能是一個可行的解決方案。


這裏是我的陣列的樣本:

//Store Holidays in multidimensional array 
$holidays = array 
(
    "NewYearsDay"=>array 
    (
     "Date"=>"01-01-2014", 
     "Closed"=>"Yes" 
    ), 
    "MartinLutherKingJrDay"=>array 
    (
     "Date"=>"01-21-2013, 
     "Closed"=>"Yes" 
    ) 
); 

這給了我以下(這是很好的 - 我有這部分沒有問題)

Array 
(
    [NewYearsDay] => Array 
     (
      [Date] => 01-01-2014 
      [Closed] => Yes 
     ) 

    [MartinLutherKingJrDay] => Array 
     (
      [Date] => 01-21-2013 
      [Closed] => Yes 
     ) 

) 

然而,當我使用foreach循環我只獲取假期的名稱。我想獲取日期和關閉信息。

foreach ($holidays as $key => $value) { 
    echo $key; 

只給我: NewYearsDayMartinLutherKingJrDay(間距問題,我可以應付更高版本)

我希望最終能夠做到這樣的事情:

//loop through the array and do this for each iteration: 
if ((NewYearsDay['date'] == date('d-m-Y')) && (NewYearsDay['closed'] == Yes)) { 
    $status = "closed"; 
} 
+0

...使用'$ value' – Izkata

+0

你可以嵌套foreach循環或使用遞歸 – Joren

+0

@Joren在此情況下, ;數據不是遞歸的 – Izkata

回答

2

正如diegoperini有上面提到的,這裏有一個稍微多有記載版本:

foreach ($holidays as $name => $value) { 
    // $name should be there, it contains your "MartinLutherKingDay" etc, 
    // could be handy. 
    // although I'd put the formatted display name into your array: 
    // $value['name'] = 'Martin Luther King Day'; 
    list($date, $closed) = $value; 

    if ($date == date('d-m-Y')) && ($closed == 'Yes')) { 
     // if you find what you want, and you only want one, you can skip 
     // the rest of the foreach 
     $status = "closed"; 
     continue; 
    } 
} 
4

省略$key和請使用$value來達到您的數據。

foreach ($holidays as $value) { 
    var_dump($value); 
    if (($value['date'] == date('d-m-Y')) && ($value['closed'] == 'Yes')) { 
     $status = "closed"; 
    } 
} 
+1

我認爲在指定迭代的時候仍然需要$ key – Maximus2012

+0

除非程序邏輯需要,否則它是可選的 – diegoperini

+0

你是對的代碼仍然有效 – Maximus2012