2017-01-28 3 views
1

Я работаю над некоторой функцией, которая может принимать аргумент как любой массив. Некоторое значение в этом массиве определяется как переменная. Эта функция - метод класса, определенный в другом файле. Есть ли способ заменить эту переменную в массиве переменной, определенной в методе?Как заменить значение массива, определенное как переменная, переданное в другом файле?

Основная цель - иметь возможность передавать массив $args с разной структурой, но всегда существует переменная $filter_value как значение одного ключа массива.

Я хочу сказать, что метод каким-то образом заменяет значение vaiable динамическим значением, которое будет передано как $_GET parametr.

Итак, теперь метод принимает все args, создает массив из него, нажимает глобальное свойство как элемент массива. И тогда подножка run() метод Тринга, чтобы объединить два массива, один из них передается методу, и должны быть помещены значение InstEd из $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']); 
     } 
    } 
}; 

Например, в данном случае $filter['meta_key'] = 'author', в моих URL там ?auhor=5 и после run() метода я хочу получить $query->query_vars выглядит следующим образом:

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

Извините, но это не ясно, что вы на самом деле пытаются сделать. Твоя формулировка несколько сложна. Не могли бы вы добавить некоторую демонстрацию входных и ожидаемых выходных значений в ваш пример? – arkascha

+0

добавьте больше информации, надеюсь, теперь его более ясно :) –

+0

Я думаю, что здесь существует концепция промахов ... Как только ваш массив определен, в нем больше нет следа переменной. Он содержит только значения. – arkascha

ответ

0

Благодаря @arkascha я выяснил, как это сделать. Передайте массив в качестве анонимной функции:

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

пройти его, как обычно,

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

и вызов будет

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

 Смежные вопросы

  • Нет связанных вопросов^_^