获取动态生成的会话变量

时间:2016-06-27 08:25:17

标签: php arrays session dynamically-generated

尝试获取动态生成的会话变量的值。我将一个键数组传递给函数,但函数返回此字符串:

['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'],插入并返回值(例如'要返回的数据')。

2 个答案:

答案 0 :(得分:0)

您的$_dataArray代没有任何意义。您要做的事情($_SESSION['key1']['key2']['key3'])是一个简单的数组:

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

$_SESSION = $array;

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

答案 1 :(得分: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'