Получение динамически генерируемых переменных сеанса

Попытка получить значение динамически генерируемой переменной сеанса. Я передал массив ключей функции, но функция возвращает эту строку:

['key1']['key2']['key3']

а не как интерполированное значение сеанса.

Код:

// Sample $_SESSION superglobal
Array
(
[key1] => Array
(
[key2] => Array
(
[key3] => 'data to return'
)
)
)

// Function
public function session_data( $variables = array() )
{
// Set variables
$_dataArray = null;
$_dataArray = "['" . implode( "']['", $variables ) . "']";

// Return
return $_SESSION{$_dataArray};
}

// Call function
var str = session_data( array('key1', 'key2', 'key3') );
echo str;  // Echoes ['key1']['key2']['key3'] instead of 'data to return'

Что я делаю неправильно? Я думал, что фигурные скобки вокруг $ _dataArray будут генерировать следующее: $ _SESSION [‘key1’] [‘key2’] [‘key3’], интерполировать и возвращать значение (например, «данные для возврата»).

1

Решение

Ваш $_dataArray поколение не имеет никакого смысла. Что вы пытаетесь сделать ($_SESSION['key1']['key2']['key3']) это простой массив:

$array = [
'key1' => [
'key2' => [
'key3' => 'Your data'
]
]
];

$_SESSION = $array;

echo $_SESSION['key1']['key2']['key3'] . PHP_EOL; // Echoes 'Your data'
0

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

Вы можете использовать рекурсивную функцию следующим образом:

function loop_through($array){
foreach ($array as $key=> $val){
if (!is_array($val)) {
return $val;
} else {
return ( loop_through($val) );
}
}
}

echo loop_through($array); // echoes 'Your data'
0

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