【发布时间】:2011-07-24 00:38:50
【问题描述】:
我之前已经在脚本中完成了一百万个 if 和 foreach 的操作,但我似乎无法弄清楚这一点。它只是不工作......?也许这是其中之一,如果您看 100 次您将看不到错误并且需要第二双眼睛。好的,代码如下:
private function removeResultsByUID() {
foreach ($this->searchResults as $key => $value) {
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)
unset($this->searchResults[$key]);
}
return;
}
很简单,它是论坛搜索程序的一部分,该程序会尝试根据用户可能输入的用户名来删除搜索结果。问题是,它没有过滤,所以我进入了测试模式并调整了代码以查看发生了什么:
private function removeResultsByUID() {
foreach ($this->searchResults as $key => $value) {
var_dump($this->searchResults[$key]['authorUID']);
echo ' ';
var_dump($this->searchUID);
echo '<br />';
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID) {
echo "This isn't a match";
unset($this->searchResults[$key]);
}
}
die();
return;
}
好的,这是一种简单的测试方法,转储我正在检查的变量以查看它们的值设置为(使用 var_dump 而不是 echo 以确保它们都是字符串类型,据我所知)。然后我在 if 中添加一个 echo 以查看 if 条件何时触发。然后杀死脚本以查看结果。我用用户名输入了一些搜索条件,程序根据数据库中的表将其更改为用户 ID,它从匹配的搜索中获取的每个结果都将作者的用户 ID 添加到结果数组中。这是我得到的:
string(1) "3" string(1) "3"
string(1) "1" string(1) "3"
string(1) "1" string(1) "3"
string(1) "1" string(1) "3"
看起来 if 永远不会触发,即使 if 使用的转储变量使它看起来好像应该在最后 3 次迭代中触发。我盯着它看了一个小时。我到底做错了什么?我肯定会因为一个愚蠢的错误而自责,我只是看不到它。感谢您的帮助!
【问题讨论】:
-
哦,至于为什么我在数据库调用后删除搜索结果而不是添加 WHERE UID = $this->searchUID - 是的,我知道这可能会加快它的速度,但是我有理由这样做。
-
爱上半打眼睛发现你错过的东西。
-
叹息,是的,它发生的频率比我想的要多;)
标签: php debugging foreach if-statement