【问题标题】:Why this function always returning false?为什么这个函数总是返回假?
【发布时间】:2016-03-30 17:33:34
【问题描述】:

我有一个非常基本的问题。这可能是一个非常糟糕的问题,但我只是想消除我的困惑。

function check_array($user_value,$array)
    {
        foreach ($array as $key => $value) {
            if($value==$user_value)
            {
                return true;
            }
            return false;
        }
        //return false;
    }

为什么这个函数总是返回 false。

例如,如果我有$numbers = array(1,2,3)。如果我将 2 与这个数组匹配,它应该返回 true,否则返回 false。但是为什么它总是返回 false 呢?

【问题讨论】:

  • 您在foreach 中使用return,所以这里实际要做的是检查条件是否设置true,然后它将从函数中获取exited true 否则它会以false 退出
  • 这里如果为真它也返回假。
  • Check This。当您在代码中放置 return 时,代码仅从那里获取 exited,之后不再执行任何代码
  • 将 return false 排除在循环之外.....
  • @rahul 他已经尝试过了,他的代码中也有它,我不知道他为什么要浪费时间

标签: php function


【解决方案1】:

为什么它总是返回 false ?

尝试自己充当计算机“执行”此功能。

如果数组的第一个元素等于$user_value,它将返回true。如果不是 - 它将进一步向下循环并返回 false。

您可能想检查数组的所有元素是否相等。在这种情况下,你需要使用这个:

function check_array($user_value,$array)
    {
        foreach ($array as $key => $value) {
            if($value==$user_value)
            {
                return true;
            }
        }
        return false;
    }

【讨论】:

  • 你的意思是如果我在循环中写 return true,它只是检查第一个元素?如果我将 return false 从数组中取出,这意味着它正在检查所有元素,如 i++ ?
  • 是的,它会检查直到它不会得到 true 或最后是 false 但如果你的数组有像 array(1,2,3,2) 这样的冗余值,那么它也会返回 true只有第一个
【解决方案2】:

return false 放错地方了,应该是你注释掉的地方,而不是其他地方。

function check_array($user_value,$array)
    {
        foreach ($array as $key => $value) {
            if($value==$user_value)
            {
                return true;
            }
        }
        return false;
    }

如果return在其他地方,在第一个数组单元格中找不到你的值后会返回false。

【讨论】:

  • 我添加了评论,因为我已经尝试过并得到了答案。我的问题是循环有什么问题?
【解决方案3】:

当php已经有了in_array时,你不需要为它创建一个函数

你可以像在一行中一样使用它

$result = in_array($user_value,$array)

如果找到该值将返回true,如果没有找到则返回false。 你不需要遍历数组

【讨论】:

  • 我知道!我做了一个例子来清晰这个基本的编程知识。
【解决方案4】:

您在循环内有 return false 。这意味着如果第一个元素不匹配,它将返回 false。它甚至不会检查数组的第二个元素

【讨论】:

  • 如果匹配,会发生什么?返回真?但它返回错误。
【解决方案5】:

您的函数将返回 false,除非它与数组中的第一个值匹配。

这是因为此时您的逻辑顺序错误,如果数组中的第一个值与 $user_value 不匹配,则函数返回 false。

您可以通过将return false; 代码行移到循环下方来解决此问题。 现在循环将遍历数组中的所有值。如果它匹配一个,它将返回true,如果它检查了所有值并且没有匹配,那么它将返回false。

function check_array($user_value,$array)
    {
        foreach ($array as $key => $value) {
            if($value==$user_value) return true;
        }
        return false;
    }

这应该可以清除代码中的逻辑错误。但是,我对 Veerendra 的in_array() 答案投了赞成票,因为这意味着不需要任何循环,从而减少您的代码。

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2019-06-26
    • 2020-06-17
    • 2021-07-23
    相关资源
    最近更新 更多