在我的项目中,有各种不同内容类型的搜索结果。出于不重要的原因,并非所有内容类型都带有唯一ID。但是,我尝试编写此循环来检测IDless内容类型,并为它们提供唯一的ID。
基本上,结果如下:
[...]
我试过了:
$current = $result->section;
// if there's a category ID -- use it
if ($current != null) echo $result->sectionid;
else
// if this is the first IDless category -- initialize. this happens once.
if ($virginity == true) {
$store = $current;
$virginity = false;
}
// if initialized and current category string is the same as stored category string -- print it
if (($virginity == 0) && ($store = $current)) {
echo $defaultID;
}
// if initialized and current category string is different from the stored category string -- set new default category +1 and print it
if (($virginity == false) && ($store != $current)) {
$defaultID = $defaultID++;
echo $defaultID;
$store = $current;
}
你能看到我要去哪里吗?
尝试在下一个循环会话中为搜索结果中出现的每个新类别提供唯一ID - 检查类别字符串是否与前一个相同 - 如果是 - 使用相同的ID,否则 - 使用1,打印新ID并存储新类别。
但是:这不能正常工作。
为什么?
答案 0 :(得分:0)
你的代码有点难以阅读,但我看到的一个大红旗是这个块:
//You have a single equals sign here v
if (($virginity == 0) && ($store = $current))
{
echo $defaultID;
}
这意味着,只要$virginity==0
,该行将始终运行,$store
将始终等于$current
。
顺便说一下,我将推荐一些重新格式化和可读性的建议。拿走他们或留下他们,但这只是我的观点。
$ current = $ result-> section;
if($ current!= null)
{//如果其中一个结果有括号,则在两者上放置括号
echo $ result-> sectionid;
}
否则如果($ virginity == true)
{//如果这是第一个无ID类别 - 初始化。这发生了一次。
$ store = $ current;
$ virginity = false;
}
//you're setting $virginity=false or true, so doing !$virginity makes sense
// if it was actually a number, then comparing to 0 is better
// also, use parentheses only where really needed, otherwise it's just clutter
if (!$virginity && $store == $current)
{
echo $defaultID;
}
if(!$ virginity&& $ store!= $ current) {//如果初始化和当前类别字符串与存储的类别字符串不同 - 设置新的默认类别+1并打印它 $ defaultID = $ defaultID ++; echo $ defaultID; $ store = $ current; }