2016-11-22 71 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);