これが私がやろうとしていることの基本的な論理ですが、うまくいかないようです。
- アルファベットの配列をループします
- 文字ごとに、XMLをループし、プログラム名が現在の文字で始まり、メジャーがまだ出力の配列にない場合は、XMLからのデータを含むリンクを出力します。
- リンクが出力されるときはいつでも、出力の配列にメジャーを追加して、doubleを出力しないようにします
問題は、メジャーが配列内にある場合でも、次の行であるということです。
if (!in_array($program->Program, $majors)) {
は常にtrueを返し、doubleが出力されます。
現在、ページ上では、リンクが出力されるたびに、配列全体を出力して、メジャーが配列に存在することを視覚的に確認しています。メジャー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>';
}
?>