2017-01-28 5 views
1

私は任意の配列として引数を受け入れることができるいくつかの関数に取り組んでいます。この配列の一部の値は変数として定義されます。この関数は別のファイルで定義されたクラスメソッドです。メソッドで定義された変数によって配列内のその変数を置き換える方法はありますか?別のファイルで渡された変数として定義された配列値を置き換えるにはどうすればよいですか?

主な目標は、構造が異なる$args配列を渡す機能を持たせることですが、1つの配列キーの値として常に変数$filter_valueが存在します。

何らかの方法で、そのvaiableをパラメータ値$_GETとして渡される動的値に置き換えることを伝えたいと思います。

これで、すべてのargsを受け入れ、配列を作成し、グローバルプロパティを配列要素としてプッシュします。そして、2つの配列をマージするトリングrun()方法をruningて、それらの一方がメソッドに渡され、そこに置かれるべき値は

$filter_value可変test.phpを

$authors_arr = array(
    '5' => 'author_name', 
    '7' => 'author_name2', 
); 
$args = array('author'=>$filter_value); 

$dynamic_admin = new DynamicAdmin(); 
$dynamic_admin->addFilter('post', 'author', __('All authors','fn'), $authors_arr, $args); 
$dynamic_admin->run(); 

Class.phpとの

class DynamicAdmin{ 
    private $filter_fn = array(); 
    public function addFilter($post_type, $meta_key, $label, $value_list, $args){ 
     $args_arr = compact('post_type', 'meta_key', 'label', 'value_list','args'); 
     $this->filter_fn[] = $args_arr; 
    } 
    public function run(){ 
     foreach ($this->filter_fn as $filter){ 
     $filter_value = $_GET[$filter['meta_key']]; 
     $query->query_vars = array_merge($query->query_vars, $filter['args']); 
     } 
    } 
}; 
をinsted

たとえば、現在のケースでは$filter['meta_key'] = 'author'、私のURLには?auhor=5があり、run()メソッドの後には、$query->query_varsのようになります:

Array(
    ..., 
    'author' => 5, 
    ..., 
) 
+0

申し訳ありませんが、になりますが、あなたが実際にやってみてください何か不明です。あなたの言葉遣いは、やや難しいです。あなたの例にいくつかの入力と期待される出力値のデモンストレーションを加えてください。 – arkascha

+0

もっと情報を追加して、今、より明確になることを祈っています:) –

+0

私はそこには懐疑的な考えがあると思います...あなたの配列が定義されると、それ以上の変数のトレースはありません。値だけが含まれています。 – arkascha

答えて

0

@arkaschaのおかげで、私はそれを可能にする方法を見つけました。無名関数として配列を渡す:

$dynamic_admin->addFilter('post', 'author', __('All authors','fn'), $authors_arr, $args); 

と呼びいつものように

$args = function ($value) { 
    return array('author'=>$value); 
} 

パスは

class DynamicAdmin{ 
    private $filter_fn = array(); 
    public function addFilter($post_type, $meta_key, $label, $value_list, $args){ 
     $args_arr = compact('post_type', 'meta_key', 'label', 'value_list','args'); 
     $this->filter_fn[] = $args_arr; 
    } 
    public function run(){ 
     foreach ($this->filter_fn as $filter){ 
     $filter_value = $_GET[$filter['meta_key']]; 
     $query->query_vars = array_merge($query->query_vars, $filter['args']($filter_value)); 
     } 
    } 
}; 
関連する問題