2012-09-12 58 views
1

我正在構建一個日曆應用程序,該應用程序將允許我們的管理團隊輸入員工假期,培訓日,病假等,以及所有員工在任何特定日期查看誰進/出。日曆是按照記錄休息日的機制構建的。我努力展示誰在什麼時候。使用的print_r我得到以下從服務器返回,顯示沒有名稱,日期和原因:PHP數組和非唯一密鑰的問題

Array ( 
[0] => stdClass Object ([name] => Becca [date] => 2012-10-10 [reason] => Sick) 
[1] => stdClass Object ([name] => Frank [date] => 2012-09-12 [reason] => Sic) 
[2] => stdClass Object ([name] => Frank [date] => 2012-10-14 [reason] => Sic) 
[3] => stdClass Object ([name] => Paola [date] => 2012-10-10 [reason] => Sic) 
[4] => stdClass Object ([name] => Clive [date] => 2012-10-14 [reason] => Hol)) 

我可以遍歷並顯示一些名字和日期的,但如果超過一個人關在一個給定日期(例如Becca,Paola),只顯示姓氏,我相信因爲密鑰必須是唯一的。下面的代碼是這種情況,其中「日期(‘年月日’,$日期)」是印刷日曆上的日期的手段:

foreach ($absenceArray as $dateofabsence=>$name){ 
    if (date("Y-m-d", $date) == $dateofabsence){ 
     $showname[$x] = $name; 
    } 
} 

是否有人可以證明我如何通過上述陣列和鏈接遍歷每個名稱到我的日曆中的相應日期。

我很抱歉,我毫無疑問沒有正確解釋我自己,但我的大腦被打亂了。

+3

變量'$ x'是什麼意思? – ggreiner

+0

對於($ x = 0; $ x <365; $ x ++){ }' ,我正在使用 '遍歷一年中的某幾天。在這裏使用$ x使$顯示每一天都是唯一的 –

回答

0

在遍歷此數組時,鍵將是數字,'value'將是一個對象,如print_r轉儲中所示。所以路要走:

$showname = array(); 
foreach($absenceArray as $object) 
{ 
    if(date("Y-m-d", $date) === $object->date) 
    { 
    $showname[] = $object->name; 
    } 
} 
+0

非常感謝,就是這樣 –

2

如果你想查看哪些人在某一天缺席,我會首先解析數組,以便將基於日期的數組作爲關鍵字。特別是在您想將這些東西添加到日曆的環境中時,它可能會很有用。

$absenceByDate = array(); 
foreach ($absenceArray as $index => $record) { 
    if (!array_key_exists($record->date, $absenceByDate)) { 
     $absenceByDate[$record->date] = array(); 
    } 

    $absenceByDate[$record->date][] = $record; 
} 

現在你將有一個很好的陣列基於日期(如鑰匙),你可以簡單地通過你的壓延機循環,並檢查是否有與當前日期的關鍵項目。如果是這樣,至少有一個人不在場。 See the demo for a working example

+0

是不是記錄一個對象或我錯過了什麼? –

+0

@ aziz.punjani感謝您指出。 – PeeHaa