PHP数组和非唯一键的问题

时间:2012-09-12 16:35:32

标签: php

我正在构建一个日历应用程序,允许我们的管理团队输入员工假期,培训日,病假等以及所有员工,以查看在任何一天进出的人员。日历是按照记录休假的机制而构建的。我正在努力展示谁何时离开。使用print_r我从服务器返回以下内容,显示缺席的名称,日期和原因:

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),则仅显示姓氏,我相信因为密钥必须是唯一的。以下代码执行此操作,其中'date(“Y-m-d”,$ date)'是在日历上打印日期的方法:

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

有人可以演示我如何迭代上面的数组并将每个名字链接到我日历中的相应日期。

我道歉,我无疑没有正确解释自己,但我的大脑已经疲惫不堪。

2 个答案:

答案 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

答案 1 :(得分:0)

当遍历此数组时,键将是数字,'value'将是一个对象,您可以在print_r转储中看到。所以要走的路就像:

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