2016-11-22 30 views
1

$managers変数にchange変数にアクセスしようとしています。関数内で関数内変数を使用する

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; 
    } 

私はglobal $ managersを試しました。変更機能でも動作しません。

+0

関数内で関数を宣言することはできますが、外部関数を複数回呼び出すと内部関数の再宣言エラーが発生します。ここで閉鎖を使用する方が良い。 – Progrock

+0

グローバル宣言が機能しなかったのは、両方の関数内で$ managersグローバルを宣言する必要があるからです。 – Progrock

答えて

2

あなたが関数にその変数を渡すためにuseキーワードを使用することができ

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

あなたのパラメータを追加することができます使用array_walk。たとえば、次のようなものがあります。

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