Попытка получить значение динамически генерируемой переменной сеанса. Я передал массив ключей функции, но функция возвращает эту строку:
['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’], интерполировать и возвращать значение (например, «данные для возврата»).
Ваш $_dataArray
поколение не имеет никакого смысла. Что вы пытаетесь сделать ($_SESSION['key1']['key2']['key3']
) это простой массив:
$array = [
'key1' => [
'key2' => [
'key3' => 'Your data'
]
]
];
$_SESSION = $array;
echo $_SESSION['key1']['key2']['key3'] . PHP_EOL; // Echoes 'Your data'
Вы можете использовать рекурсивную функцию следующим образом:
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'