gpt4 book ai didi

php - 为什么 !in_array() 不能正常工作?还是我的逻辑有问题?

转载 作者:搜寻专家 更新时间:2023-10-31 20:46:25 25 4
gpt4 key购买 nike

这是我尝试做的事情的基本逻辑,但似乎不起作用。

  1. 遍历字母数组
  2. 对于每个字母,循环遍历 XML,如果程序名称以当前字母开头,并且专业不在输出数组中,则输出一个包含 XML 中一些数据的链接
  3. 每当输出链接时,将主要内容添加到输出数组中,这样我们就不会输出双数

问题是即使专业在数组中,行:

if (!in_array($program->Program, $majors)) {

总是返回 true,导致 double 输出。

当前在页面上,在每个链接输出之后我还输出整个数组以直观地确认数组中存在主要内容,当您到达主要 WBAN 的页面底部时,在第一个输出中您可以查看其上方的数组,发现它不存在于数组中,因此它会输出,但是,下一个链接输出也是 WBAN,您可以在其上方的数组中看到它已经存在,因此如果应该返回 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>';
}
?>

最佳答案

您必须将节点转换为字符串值:

if (!in_array((string)$program->Program, $majors)) {

和:

array_push($majors, (string)$program->Program);

这是您在使用 SimpleXML 时必须习惯的事情之一;将变量隐式转换为字符串的函数不需要这种特殊处理,但如果你真的很偏执,我建议转换所有内容;-)

例如,substr() 不需要转换,因为它期望第一个参数无论如何都是一个字符串,并且它会自动转换它。

关于php - 为什么 !in_array() 不能正常工作?还是我的逻辑有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com