如何在PHP

时间:2017-04-12 22:26:26

标签: php arrays session multidimensional-array key

有一个像这样的数组(实际上我不知道它的深度,只是告诉你它的结构):

$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 . ';');

1 个答案:

答案 0 :(得分:0)

由于没有人有任何想法,我在这里发帖:

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 . ';');