我一直在搜索并且找不到它,尽管很难用语言表达,所以如果它在其他地方被提及,我深表歉意。
我进行了一个API调用,这给了我。这是在给定日期工作的班次,每个班次都有一个数组。这就是样子。
$lastMon = array{
date => $date
hours => 8
worker => mjones
etc
}
现在,我想获取招聘者的价值和小时数,并创建另一个看起来像这样的数组
$lastMonData = array{
key for each $lastMon->recruiter => sum of all $lastMon->hours where recruiter is unique
total += $lastMon->hours
}
基本上,我从该系统中提取了一堆班次,并将其转变为数组,并插入了从系统其他部分提取的一些键。然后,我需要一个按日期排列的数组,其中包含当天所有班次的总工作时间,然后是招聘人员密钥中每个唯一名称的密钥,该密钥将同一阵列中提到的工时加起来。我希望这是有道理的。
编辑:
这是一个例子
SimpleXMLElement Object
(
[orderId] => 4000262
[status] => filled
[shiftStartTime] => 2018-12-10T07:30:00
[shiftEndTime] => 2018-12-10T12:30:00
[tempId] => 80231
[firstName] => SimpleXMLElement Object
(
)
[lastName] => SimpleXMLElement Object
(
)
[clientId] => 42642
[clientName] => SimpleXMLElement Object
(
)
[regionName] => SimpleXMLElement Object
(
)
[orderSpecialty] => School
[orderCertification] => RN
[floor] => SimpleXMLElement Object
(
)
[shiftNumber] => 1
[note] => SimpleXMLElement Object
(
)
[payrollNumber] => SimpleXMLElement Object
(
)
[lessLunchMin] => SimpleXMLElement Object
(
)
[dateTimeCreated] => 2018-08-17T09:33:43
[takenBy] => 592
[bookedByUserId] => 592
[orderTypeId] => 1
[orderType] => SimpleXMLElement Object
(
)
[city] => Holmdel
[state] => NJ
[zipCode] => 07733
[orderSourceID] => SimpleXMLElement Object
(
)
[orderSourceName] => SimpleXMLElement Object
(
)
[lt_orderID] => 13643
[dateTimeModified] => 2018-08-17T09:33:43
[recruiter] => John Smith
[hours] => 05
)
SimpleXMLElement Object
(
[orderId] => 4002473
[status] => filled
[shiftStartTime] => 2018-12-10T09:00:00
[shiftEndTime] => 2018-12-10T13:30:00
[tempId] => 1397353
[firstName] => SimpleXMLElement Object
(
)
[lastName] => SimpleXMLElement Object
(
)
[clientId] => 47597
[clientName] => SimpleXMLElement Object
(
)
[regionName] => SimpleXMLElement Object
(
)
[orderSpecialty] => School
[orderCertification] => RN
[floor] => SimpleXMLElement Object
(
)
[shiftNumber] => 1
[note] => SimpleXMLElement Object
(
)
[payrollNumber] => SimpleXMLElement Object
(
)
[lessLunchMin] => SimpleXMLElement Object
(
)
[dateTimeCreated] => 2018-08-20T08:53:23
[takenBy] => 592
[bookedByUserId] => 592
[orderTypeId] => 1
[orderType] => SimpleXMLElement Object
(
)
[city] => Tinton Falls
[state] => NJ
[zipCode] => 07701
[orderSourceID] => SimpleXMLElement Object
(
)
[orderSourceName] => SimpleXMLElement Object
(
)
[lt_orderID] => 0
[dateTimeModified] => 2018-08-20T10:05:33
[recruiter] => Mike Jones
[hours] => 04
)
我需要获取招聘者的价值,并将这些价值放入新数组中的键中。重复一些,所以我只想选择独特的。然后,该数组中的小时数将是新数组中招聘人员姓名键的值。
所以这看起来像
$lastMon = array{
Mike Jones => 4
John Smith => 5
Total => 9
}
答案 0 :(得分:0)
您可以使用array-reduce来汇总招聘人员的时间:
$lastMon = array(array("recruiter" => "AAA", "hours" => 4), array("recruiter" => "BBB", "hours" => 5), array("recruiter" => "AAA", "hours" => 3));
function reduceHours($carry, $item)
{
if (!array_key_exists($item["recruiter"], $carry))
$carry[$item["recruiter"]] = 0;
$carry[$item["recruiter"]] += $item["hours"];
return $carry;
}
$lastMonData = array_reduce($lastMon, "reduceHours", array());
这将输出:
Array
(
[AAA] => 7
[BBB] => 5
)
已编辑
现在您添加了更多数据,我可以为您提供更详细的答案:
$str = '<xml><shifts><recruiter>John Smith</recruiter><hours>05</hours></shifts><shifts><recruiter>Mike Jones</recruiter><hours>04</hours></shifts><shifts><recruiter>John Smith</recruiter><hours>08</hours></shifts></xml>';
$arr = json_decode(json_encode((array) simplexml_load_string($str)), 1);
function sum($carry, $item) { return $carry + $item;}
function reduceHours($carry, $item)
{
if (!array_key_exists($item["recruiter"], $carry))
$carry[$item["recruiter"]] = 0;
$carry[$item["recruiter"]] += $item["hours"];
return $carry;
}
$lastMonData = array_reduce($arr["shifts"], "reduceHours", array());
$lastMonData["total"] = array_reduce($lastMonData, "sum");
将xml对象转换为数组来自here。
这将为$lastMonData
提供输出:
Array
(
[John Smith] => 13
[Mike Jones] => 4
[total] => 17
)
我知道总数的总和可以用其他方法完成,但我尝试保留使用array_reduce的示例。