首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常简单的foreach和if -找不出为什么它不能工作- PHP

非常简单的foreach和if -找不出为什么它不能工作- PHP
EN

Stack Overflow用户
提问于 2011-03-28 03:15:44
回答 8查看 143关注 0票数 2

我以前在脚本中做过一百万次if和foreach,但这一次我似乎搞不懂。它就是不起作用...?也许这是其中的一件事,如果你看它100次,你就看不到错误,需要第二双眼睛。好的,下面是代码:

代码语言:javascript
复制
private function removeResultsByUID() {
   foreach ($this->searchResults as $key => $value) {
    if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)
        unset($this->searchResults[$key]);
        }
   return;
   }

很简单,它是一个论坛搜索程序的一部分,该程序试图根据用户输入的用户名来删除搜索结果。问题是,它没有过滤,所以我进入了测试模式,并调整了代码,看看发生了什么:

代码语言:javascript
复制
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添加到结果数组中。下面是我得到的结果:

代码语言:javascript
复制
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次迭代中触发。我盯着它看了一个小时了。我到底做错了什么?我肯定我会为一个愚蠢的错误而责备自己,我就是看不出来。谢谢你的帮助!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-03-28 03:19:58

您想要使用!=而不是!$x == $y

代码语言:javascript
复制
if ($this->searchResults[$key]['authorUID'] != $this->searchUID) {
// or: if(!($this->searchResults[$key]['authorUID'] == $this->searchUID)) {
  // your code here
}

!$this->searchResults[$key]['authorUID']将是truefalse (最有可能是false,除非您的id为"0")。所以你的比较结果变成了false == $this->searchUID --不太可能匹配。

票数 1
EN

Stack Overflow用户

发布于 2011-03-28 04:08:00

我假设searchResults是一个数组数组

您可以像这样遍历每个元素:

代码语言:javascript
复制
foreach ($this->searchResults as $key => $value)

那么你根本不需要使用这个值:

代码语言:javascript
复制
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)

我想你想说的是:

代码语言:javascript
复制
if (value['authorUID'] != $this->searchUID)  // (fixed Boolean logic)

您可以通过在foreach中使用引用来进一步优化它:

代码语言:javascript
复制
 foreach ($this->searchResults as $key => &$value)
票数 1
EN

Stack Overflow用户

发布于 2011-03-28 03:20:00

代码语言:javascript
复制
if (!$this->searchResults[$key]['authorUID'] == $this->searchUID)

你否定了第一项,然后与第二项进行了比较。添加括号或使用!=

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5451671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档