显示数组中的重复元素

时间:2013-05-04 10:51:56

标签: php arrays duplicates

我正在制作日历,并希望从数组中显示元素(公众假期等)。

$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;
}

但它只显示“学校假期”,这是阵列中的最后一个元素,但我想同时展示“新年”和“学校假期”。

有关如何解决此问题的任何建议?提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以为此格式的每个条目创建一个数组,因为数组键必须是唯一的:

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

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

此外,您不必使用大循环,直接阵列访问就足够了。

答案 1 :(得分:0)

数组中不能有两个具有相同键的元素。这样:

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

评估为

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

所以你在循环中只得到一个结果就不足为奇了。

考虑这样的事情:

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

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