我以前在脚本中做过一百万次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中添加了一个回显,以查看if条件何时触发。然后终止脚本以查看结果。我抛出一些带有用户名的搜索条件,程序根据数据库中的表将其更改为userID,它从匹配的搜索中获取的每个结果都会将作者的用户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次迭代中触发。我盯着它看了一个小时了。我到底做错了什么?我肯定我会为一个愚蠢的错误而责备自己,我就是看不出来。谢谢你的帮助!
发布于 2011-03-28 03:19:58
您想要使用!=而不是!$x == $y
if ($this->searchResults[$key]['authorUID'] != $this->searchUID) {
// or: if(!($this->searchResults[$key]['authorUID'] == $this->searchUID)) {
// your code here
}!$this->searchResults[$key]['authorUID']将是true或false (最有可能是false,除非您的id为"0")。所以你的比较结果变成了false == $this->searchUID --不太可能匹配。
发布于 2011-03-28 04:08:00
我假设searchResults是一个数组数组
您可以像这样遍历每个元素:
foreach ($this->searchResults as $key => $value)那么你根本不需要使用这个值:
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)我想你想说的是:
if (value['authorUID'] != $this->searchUID) // (fixed Boolean logic)您可以通过在foreach中使用引用来进一步优化它:
foreach ($this->searchResults as $key => &$value)发布于 2011-03-28 03:20:00
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)你否定了第一项,然后与第二项进行了比较。添加括号或使用!=。
https://stackoverflow.com/questions/5451671
复制相似问题