2016-11-22 79 views
1

我正试图访问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; 
    } 

我已经尝试过全球$管理者;在更改功能但它也不起作用。

+0

您可以在一个函数内部声明一个函数,但多次调用外部函数将导致内部函数的重新声明错误。最好在这里使用闭包。 – Progrock

+0

您的全局声明失效的原因是您需要在两个函数中声明$ managers全局。 – Progrock

回答

2

使用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); 
+0

谢谢你,它做到了。 – BARNI

+0

欢迎您:) – nospor

+0

@BARNI,如果答案很有用,您可以点击勾号✔接受它(这是您如何奖励他们的努力)。 –

0

您可以使用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);