【问题标题】:Echo works, but return does not in php functionEcho 有效,但在 php 函数中没有返回
【发布时间】:2016-03-18 12:23:30
【问题描述】:

我有下面的功能。它可以在 return 之前回显结果,但不能返回它(我得到 NULL)。

为什么它不起作用,我需要做什么才能让它起作用?

class Config
{   
    public static function findKey($key, $array) {
        foreach($array as $item) {
            if(is_array($item)) {
                if(isset($item[$key])) {
                    return $item[$key];
                } else {
                    self::findKey($key, $item);
                }
            }
        }
    }
}

如果我能得到任何帮助,我将不胜感激!

【问题讨论】:

  • 你如何使用该代码
  • 这是在一个名为 Config 的类中。所以我这样使用它: echo Config::findKey('Key', $array);
  • 替换 self::findKey($key, $item);用 $this->findKey($key, $item);
  • 那行不通。它说不在对象上下文中使用 $this
  • 请编辑您的问题并显示全班代码。

标签: php return echo


【解决方案1】:

您递归调用您的方法,并在最深层次返回一个值,但您忘记将返回值传递回递归树。

所以改变这个:

                self::findKey($key, $item);

作者:

                $result = self::findKey($key, $item);
                if ($result !== false) {
                    return $result;
                }

.. 并确保在 forEach 循环之后找不到密钥时返回 false

class Config
{   
    public static function findKey($key, $array) {
        foreach($array as $item) {
            if(is_array($item)) {
                if(isset($item[$key])) {
                    return $item[$key];
                } else {
                    $result = self::findKey($key, $item);
                    if ($result !== false) {
                        return $result;
                    }
                }
            }
        }
        return false;
    }
}

【讨论】:

  • 仍然没有改变任何东西。 :(
【解决方案2】:

findKey - 非静态方法。你应该写

public static function findKey($key, $array){}

在 foreach 循环之前检查是 $array 并且不为空

这个方法只返回结果,打印你应该调用echo ClassName::findKey($key, $array)

【讨论】:

  • 我之前有过public static,还是没区别。
  • 在 foreach 结束后写一些类似 return $key 。 '未找到';
  • 是的,说没找到。
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多