【问题标题】:use variable inside function within function在函数内使用函数内的变量
【发布时间】:2016-11-22 14:03:24
【问题描述】:

我正在尝试访问 change 函数中的 $managers 变量。

public function ManagerPerDay() {
        $query = $this->mysqli()->query('SELECT
                                            manager,
                                            count(manager) AS count
                                        FROM
                                            DATA
                                        GROUP BY
                                            manager
                                        ORDER BY
                                            count DESC');
        $data = $query->fetch_all();

        $managers = $this->GetManagers();

        function Change($n)
        {
            $name = $managers[array_search($n[0], array_column($managers, 'id'))]['name'];
            $n[0] = $name;
            return $n;
        }

        $data = array_map('Change', $data);

        array_unshift($data, ['Manager', 'Per Day']);
        return $data;
    }

我已经尝试过全局 $managers;在更改功能中,但它也不起作用。

【问题讨论】:

  • 可以在函数内部声明一个函数,但是多次调用外部函数会导致内部函数重新声明错误。最好在这里使用闭包。
  • 你的全局声明不起作用的原因是你需要在两个函数中声明 $managers 全局。

标签: php function class


【解决方案1】:

使用array_walk 可以添加参数

function Change(&$n, $key, $managers)
        {
            $name = $managers[array_search($n[0], array_column($managers, 'id'))]['name'];
            $n[0] = $name;            
        }

        array_walk($data, 'Change', $managers);

【讨论】:

  • @BARNI,如果答案有用,您可以单击复选标记 ✔ 接受它(这是您奖励人们努力的方式)。
  • 抱歉,没有在线(勾选✔)。
【解决方案2】:

您可以使用use 关键字将该变量传递给函数。例如这样的事情:

$data = array_map(function($n) use ($manager) {
    $name = $managers[array_search($n[0], array_column($managers, 'id'))]['name'];
    $n[0] = $name;
    return $n;
}, $data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2012-06-06
    • 2018-12-02
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多