0

カレンダーを作っていて、配列から要素(祝日など)を表示したい。

$holidays = Array (
    "20130101" => "New Year's Day",
    "20130101" => "School Holiday",
    "20130126" => "Australia Day",
...
);

$today = '20130101';
foreach ($holidays as $key => $val) {
    if ($today == $key) echo $val; else;
}

しかし、配列の最後の要素である「School Holiday」しか表示されませんが、「元日」と「School Holiday」の両方を表示したいです。

この問題にアプローチする方法について何かアドバイスはありますか? 前もって感謝します。

4

3 に答える 3

1

配列キーは一意である必要があるため、この形式で各エントリの配列を作成できます。

$holidays = Array (
    "20130101" => array (
                         "New Year's Day",
                         "School Holiday",
                  ),
    "20130126" => array("Australia Day"),
...
);

if (isset($holidays[$today]))
    echo implode(", ", $holidays[$today]);

また、大きなループを使用する必要はありません。直接配列アクセスで十分です。

于 2013-05-04T10:56:37.460 に答える
0

== 演算子を使用して文字列を比較することはできません。これを試してみてください!

$holidays = Array (
    "20130101" => "New Year's Day",
    "20130101" => "School Holiday",
    "20130126" => "Australia Day",
    ...
);

$today = '20130101';
foreach ($holidays as $key => $val) {
     if (strcmp($today,$key) == 0) echo $val; else;
}
于 2013-05-04T11:09:23.590 に答える
0

配列内に同じキーを持つ 2 つの要素を含めることはできません。これ:

$holidays = Array (
    "20130101" => "New Year's Day",
    "20130101" => "School Holiday",
    "20130126" => "Australia Day"
);

に評価されます

[
    "20130101" => "School Holiday",
    "20130126" => "Australia Day"
]

そのため、ループで結果が 1 つしか得られないことは驚くことではありません。

次のようなことを考えてみましょう:

$holidays = Array (
    Array ("date" => "20130101", "name" => "New Year's Day"),
    Array ("date" => "20130101", "name" => "School Holiday"),
    Array ("date" => "20130126", "name" => "Australia Day")
);

$today = '20130101';

foreach ($holidays as $holiday) 
{
    if ($holiday["date"] == $today) 
    {
        echo $holiday["name"] . "\n";
    }
}
于 2013-05-04T10:57:44.623 に答える