2013-05-04 5 views
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; 
} 

Но это только показывает «Школа праздник», который является последним элементом в массиве, но я хочу, чтобы показать, как «Новый год» и «Школьный праздник».

Любые советы о том, как подойти к этой проблеме? Заранее спасибо.

+1

Массив должен иметь уникальный ключ. Два или более значения никогда не могут использовать один и тот же ключ. – Rikesh

+0

Вы переписываете «Новый год» со школьным праздником из-за того, что Рикеш объяснил выше – antony

ответ

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

Вы можете создать массив для каждой записи в этом формате, как ключи массива должны быть уникальными:

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

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

Также вы не должны использовать большую петлю, прямой доступ к массиву достаточно.

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

Почему вы думаете, что использование 'strcmp' имеет значение? – Tomalak

Смежные вопросы