Я использовал стороннюю библиотеку, пытаясь создать функцию рекурсивного обхода таким массивом
Помогите мне исправить все массивы с помощью клавиши «method»
Входные данные:
$data = array(
array(
'tag' => 'browser',
'method' => 'navigate',
'attributes' => 'google.com'
), // will call $browser->navigate('google.com');
array(
'method' => 'sleep',
'attributes' => 3
), // sleep(3)
array(
'tag' => array(
'tag' => 'input',
'method' => 'get_by_attributes',
'attributes' => array (
'class', 'inputfield', false
)
),
'method' => 'set_inner_text',
'attributes' => 'foo'
), /* $input->get_by_attribute("class", "inputfield", false)->set_inner_text("foo")*/
array(
'tag' => 'browser',
'method' => 'wait_js'
), //$browser->wait_js()
array(
'tag' => 'browser',
'method' => 'wait_for',
'attributes' => 60
) // $browser->wait_for(60)
);
Выход:
$browser->navigate('google.com');
sleep(3);
$input->get_by_attribute("class", "inputfield", false)->set_inner_text("foo");
$browser->wait_js()
$browser->wait_for(60);
Уже разработана эта функция для вызова действий с использованием трех переменных:
function action($method, $tag = '', $attributes = '') {
if ($tag != '')
global ${$tag};
if ($method == '')
return false;
$params1 = ($tag != '') ? (is_array($tag) ? action($tag) : array($tag, $method)) : $method ;
$params2 = ($attributes != '') ? (!is_array($attributes) ? (is_array($params1) ? array($attributes) : array($attributes)) : (is_array($attributes[0]) ? action($attributes) : $attributes)) : array();
if (is_array($params1)):
return call_user_func_array($params1, $params2);
else: return call_user_func($params1, $params2);
endif;
}
Задача ещё не решена.
Других решений пока нет …