Переменные цикла и имена функций Переполнение стека

Допустим, у меня есть файл php.
В нем у меня есть некоторые переменные и некоторые функции. Например:

$results = getResults($analytics, $profile);
printResults($results);

function getResults($analytics, $profileId) {
return $analytics->data_ga->get(
'ga:' . $profileId,
'3daysAgo',
'2daysAgo',
'ga:sessions');
}

а также

function printResults($results) {
if (count($results->getRows()) > 0) {

$profileName = $result->getProfileInfo()->getProfileName();

$rows = $results->getRows();
$sessions = $rows[0][0];

// Print the results.
print $sessions;
} else {
print "No results found.\n";
}
}

Теперь, как я могу пройти через них, динамически изменяя имена переменных и функций?

Итак (псевдокод, надеюсь, понятно, что он пытается сделать)

for($i=2; $i<30; $i++){
$results = $results$i = getResults$i($analytics, $profile);
printResults$i($results$i);

function getResults$i($analytics, $profileId){
return $analytics->data_ga->get(
'ga:' . $profileId,
$i'daysAgo',
($i+1)'daysAgo,
'ga:sessions');
}
}

означающий, что $results становится $results2, $results3, так далее
а также
getResults() становится getResults2(), getResults3(), так далее
а также
3daysAgoстановится 4daysAgo, 5daysAgo, так далее.

Это можно сделать?

2

Решение

вы можете изменить имя переменной с помощью этого функция:

   function get_var_name($var) {
foreach($GLOBALS as $var_name => $value) {
if ($value === $var) {
return $var_name;
}
}

return false;
}

и если вы хотите изменить имя переменной $request с $request1 ты можешь сделать:

${get_var_name($request).'1'} = $request;

и если вы хотите создать функцию динамически:

  $function = create_function("/* comma separated arguments*/", "/*code as string*/);

и назовите это:

$function();
0

Другие решения

Я бы использовал массив для хранения результатов:

$results_array = array();

тогда мы можем использовать массив функций params для передачи (просто в качестве примера — не ваш скрипт):

$data = array(
'one' => array('param1' => $some_data, 'param2' => $some_other_data),
'two' => array('param1' => $more_data, 'param2' => $some_more_data),
);

foreach ($data as $k => $v)
{
$results_array[] = my_fnc_name($v['param1'], $v['param2']);
}

это добавит (через числовой индекс) возвращаемое значение функции в $results_array

0

# Использование лямбда-функции

$printResults$i= function($analytics, $profile) {
//perform your logic
};

call_user_func_array($printResults$i, array($analytics, $profile));

Ref :: call_user_func_array

0
По вопросам рекламы [email protected]