这是我正在尝试做的似乎不起作用的基本逻辑。
- 遍历字母表数组
- 对于每个字母,循环通过 XML,如果程序名称以当前字母开头,并且主要不在输出数组中,则输出带有 XML 中一些数据的链接
- 每当链接输出时,将主要添加到输出数组中,这样我们就不会输出双精度数
问题是,即使主要是在数组中的行:
if (!in_array($program->Program, $majors)) {
总是返回真,导致双打被输出。
目前在页面上,在它输出的每个链接之后,我还输出整个数组以直观地确认主要存在于数组中,当您到达主要 WBAN 的页面底部时,您可以在第一个输出中查看在它上面的数组中,看到它在数组中不存在,所以它输出但是,下一个链接输出也是 WBAN,你可以在上面的数组中看到它已经存在,所以 if 应该返回 false 和不输出...
我的逻辑一定是有缺陷的地方——我试过移动 array_push 并且不能让它正常工作——我需要新鲜的眼睛。
另外 - 如果我错了,请纠正我,但我不能从 XML 中清除重复的原因是因为完整的 XML 节点不是重复的 - 只是主要的。
例如,这里是 XML - 只有 Program 和 MajorDescription 会被复制,所以完整的 XML 节点不会被认为是重复的?:
<ProgramList>
<MajorDescription>WEB ANIMATION AND DESIGN</MajorDescription>
<Program>WBAN</Program>
<ProgramLocations>
<ProgramLocation>
<Campus>Barrie</Campus>
</ProgramLocation>
</ProgramLocations>
<Term>201310</Term>
</ProgramList>
完整代码:
<?php
$majors = array();
foreach ($alphabet as $l){
$upper = strtoupper($l);
foreach ($listxml->ProgramList as $program) {
$letter = substr($program->MajorDescription, 0, 1);
if (strcasecmp($letter, $l) == 0) {
$count1++;
$noprograms = false;
}
}
if ($count1 == 0) {
echo "<div id='$l' class='letter noprograms'>";
} else {
echo "<div id='$l' class='letter'>";
}
echo "<h2>$upper</h2>";
foreach ($listxml->ProgramList as $program) {
$letter = substr($program->MajorDescription, 0, 1);
if (strcasecmp($letter, $l) == 0) {
foreach ($majors as $major){
echo "<p>".$major."</p>";
}
//this is where the problem is - this is always coming back true even if the major is in the array
if (!in_array($program->Program, $majors)) {
echo "<a href='../program/?major=".$program->Program."' class='programLink'>".$program->Program." - ".strtoupper($program->MajorDescription)."</a> - <a target='_BLANK' href='http://www.ontariocolleges.ca/SearchResults/GEORGIAN/_/N-1z1419r?Ntt=".rawurlencode($program->MajorDescription)."&Ns1=Program_Title_SORT&Ns2=0&Qo=20&SearchWithin=on'>Apply Now</a><br />";
array_push($majors, $program->Program);
}
$count++;
}
}
if ($count == 0) {
echo "<em class='noprograms'>No Programs</em><br />";
}
echo "</div>";
$count = 0;
$count1 = 0;
}
if ($noprograms) {
echo '<div id="noprograms"><em>No results. Try broadening the search filters.</em></div>';
}
?>