如何将foreach与多维数组一起使用


How to use foreach with a multidimensional array?

如果我们的客户服务联络中心关闭,我们需要能够在我们的网站上显示消息。我正在尝试清理检查当前日期是否为假期的代码。

过去,我为每个假期使用一个变量,为每个假期使用一个 if 语句。这是很多代码,看起来很草率和不专业。我一直在阅读多维数组,看起来这可能是一个可行的解决方案。


这是我的数组示例:

//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";
}

$key并使用$value访问您的数据。

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

正如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;
    }
}