繁体   English   中英

如何在PHP中将多维数组转换为$ _SESSION键

[英]How to convert a multidimensional array to $_SESSION keys in PHP

有一个像这样的数组(实际上我不知道它的深度,只是向您展示它的结构):

$ary = array(
    'A' => array(
        'B' => array(
            'C' => array(
                'D' => array(
                    'E' => 'F'
                )
            )
        )
    )
);

我想要的是将此数组转换为$ _SESSION的键,然后按如下方式获取其值:

$val = $_SESSION['A']['B']['C']['D']['E']['F'];

因为我不知道该数组的深度,所以我现在要做的就是不断循环,依次是is_array然后foreach,is_array然后foreach ......,直到该数组中的最后一项像这样:

$val = $_SESSION['A'];
$val = $_SESSION['A']['B'];
$val = $_SESSION['A']['B']['C'];
$val = $_SESSION['A']['B']['C']['D'];
......

一定有比这更优雅的方法,任何想法都将不胜感激!

更新:这是我昨晚发现的:

public static function array_keys_multi(array $array)
{
    $keys = array();
    foreach ($array as $key => $value) {
        $keys[] = $key;
        if (is_array($array[$key])) {
            $keys = array_merge($keys, array_keys_multi($array[$key]));
        } else {
            $keys[] = $value;
        }
    }

    return $keys;
}

$params = '$_SESSION[\'' . implode('\'][\'', static::array_keys_multi($keys)) . '\']';
$exectuion = 'isset(' . $params . ')?' . $params . ':\'\'';

eval('return ' . $exectuion . ';');

由于没人知道,我在这里发布:

public static function array_keys_multi(array $array)
{
    $keys = array();
    foreach ($array as $key => $value) {
        $keys[] = $key;
        if (is_array($array[$key])) {
            $keys = array_merge($keys, array_keys_multi($array[$key]));
        } else {
            $keys[] = $value;
        }
    }

    return $keys;
}

$params = '$_SESSION[\'' . implode('\'][\'', static::array_keys_multi($keys)) . '\']';
$exectuion = 'isset(' . $params . ')?' . $params . ':\'\'';

eval('return ' . $exectuion . ';');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM