首页 > 解决方案 > 为什么方法不返回值?

问题描述

我有两种方法。get_value_from_raw_data 方法,如果通过键找到,应该返回一个值,但它总是返回 false。

public function get_value_from_raw_data($associative_key , $haystack) {

    foreach ($haystack as $key => $value) {
        if (! is_array($value)) {
            if ($key === $associative_key) {
                return $value;
            }   else {
                continue;
            }
        }   else if (is_array($value)) {
            $this->get_value_from_raw_data($associative_key , $haystack[$key]);
        }
    }

    return false;
}

private function convert_value($value) {

    $new_value = $this->get_value_from_raw_data($value['associative_key'] , $this->raw_data);

    if ($value['path_to'] !== "") {
        $paths = explode('.' , $value['path_to']);

        $temp = &$this->used_model;
        foreach ($paths as $key) {
            $temp = &$temp[$key];
        }

        $temp[$value['key_name']] = $new_value;
    }   else {
        $this->used_model[$value['key_name']] = $new_value;
    }
}

另外,如果我在返回之前在此方法中使用 dd ,那么它会显示该值,并且在返回之后它已经消失了。

在此处输入图像描述

标签: phpoop

解决方案


当您对函数进行递归调用时,您不会返回值:

else if (is_array($value)) {
    $this->get_value_from_raw_data($associative_key , $haystack[$key]);
}

应该:

else if (is_array($value)) {
    return $this->get_value_from_raw_data($associative_key , $haystack[$key]);
}

推荐阅读