我有两个阵列$ patient和$ escorts。
这些阵列代表了各种患者和护送人员的住院时间。 伴游有一个[' Escort'] [' id']值与访客(患者)的ID相关联。
我的目标是两个接受患者和护送阵列,并将它们组合成一个可用于打印的结果数组(表格或创建excel文件)。
患者可能有多次停留,患者也可能有多个护送护送他们。
$patients = [
Patient A,
Patient B,
Patient B
Patient C,
Patient D,
Patient E
];
$escorts = [
Escort for Patient B,
Escort 1 for Patient C,
Escort 2 for Patient C,
Escort for Patient E
];
我试图按以下顺序获取$ newResults数组:
$newResults = [
Patient A,
Patient B,
Patient B,
Escort for Patient B,
Patient C,
Escort for Patient C,
Escort for Patient C,
Patient D,
Patient E,
Escort for Patient E,
]
然而,当我完成对两个阵列的迭代时,我有剩余的$ escort元素,这些元素在他们的$ patient对应物之后没有被添加,但是通过患者的数据[&# 39;嘉宾'] [' id']和护送人员[' Escort'] [' id']匹配,所以我&#39 ;我不确定他们为什么不被包括在内。
我使用的代码是:
$lastPatientID = 0;
foreach($patients as $pkey => $patient) {
if($lastPatientID == 0) {
$lastPatientID = $patient['Guests']['id'];
}
if($patient['Guests']['id'] == $lastPatientID) {
// Add Patients Next Accommodation
$newResults[] = $patient;
} else {
$theseEscorts = [];
foreach($escorts as $ekey => $escort) {
if($escort['Escort']['id'] == $lastPatientID) {
$theseEscorts[] = $escort;
unset($escorts[$ekey]);
}
}
// Print the escorts for the Last Patient.
foreach($theseEscorts as $anEscort) {
$newResults[] = $anEscort;
}
// This Patient is different than last. Print New Patient.
$newResults[] = $patient;
}
$lastPatientID = $patient['Guests']['id'];
}
// Clear any remaining escorts that match the last patient.
foreach($escorts as $escort) {
if($escort['Escort']['id'] == $lastPatientID) {
$newResults[] = $escort;
} else {
// NOTE:: THIS SHOULDN'T HAPPEN UNLESS DATA IS BAD!
error_log("Orphaned Escort: \n" . print_r($escort, TRUE) );
}
}
我必须犯这个逻辑错误,虽然我不确定在哪里。
任何建议都非常适合!
答案 0 :(得分:1)
很难说你在这里给出了什么。我们在IRC上对此进行了讨论,并根据数组的实际结构提出了这个解决方案。
特点:
$('button').click(function() {
$('.CRAZY').hide();
$('.CRAZY2').show();
});
答案 1 :(得分:0)
我找到了解决方法。问题的原因是一些不良数据,即护送与患者相关联的情况,该患者在数据库表中没有住宿条目。
我的解决方案是实现一个uasort()函数,以正确的顺序放置我想要的行:
uasort($newResults, function($a, $b) {
$aSortOn = ($a['Accommodations']['purpose_id'] != 4 ? $a['Guests']['lastName'] : $a['Escort']['lastName']);
$bSortOn = ($b['Accommodations']['purpose_id'] != 4 ? $b['Guests']['lastName'] : $b['Escort']['lastName']);
if($aSortOn == $bSortOn) {
$aSortOn = ($a['Accommodations']['purpose_id'] != 4 ? $a['Guests']['firstName'] : $a['Escort']['firstName']);
$bSortOn = ($b['Accommodations']['purpose_id'] != 4 ? $b['Guests']['firstName'] : $b['Escort']['firstName']);
}
if($aSortOn == $bSortOn) {
// Sort to Make Sure Patient (Purpose_id != 4) is above (Purpose_id == 4) in results.
if($a['Accommodations']['purpose_id'] != 4 && $b['Accommodations']['purpose_id'] == 4) {
return 0;
} else {
return 1;
}
} else {
return ($aSortOn < $bSortOn) ? -1 : 1;
}
});
如果访客是患者,它将按LastName,FirstName对它们进行排序,如果它们是护送,则按护送人员的LastName,FirstName对它们进行排序。