使用字符串作为数组名称和索引来获取数组值

时间:2012-12-05 01:09:40

标签: php

我试图通过字符串将特定索引发送到某些PHP代码来描述我需要组合的数据。我遇到的问题是在Str_To_Array函数中似乎没有SESSION可用。我对这里的范围缺少什么?如果有人能推荐一种更好的方式,我会非常感激。 PS我添加了include,包括该功能导致任何异常。

function Str_To_Array($str) {

    $d = explode(':',$str) ;

    print_r($d[0]) ;

    $t = $d[0] ;

    $n = $$t ;

    if( !isset( $d[1] ) ) { return $n ; }

    $n = $n[$d[1]] ;

    return $n ;
}

include(DIR_ROOT . "php_function/Str_To_Array.php") ;

$test = '_SESSION' ;
$ARRANGE = Str_To_Array($test) ;<----this says _SESSION is undefined
print_r($ARRANGE) ;
$ARRANGE = $$test ;<----this works
print_r($ARRANGE) ;

2 个答案:

答案 0 :(得分:1)

它就像是PHP的问题,只是尝试了下面的代码,在函数中,${'_SESSION'}有效并且$$t不起作用。这只发生在$_SESSION,而不是其他超级全球$_POST$_GET等。

<?php
session_start();

function foo() {
  $t = '_SESSION';
  $a = $$t;             // not work
  $b = ${'_SESSION'};   // works
  var_dump($a, $b);
}

foo();

答案 1 :(得分:0)

这里很难遵循目的,但这应该有效

function getVar($str)
{
    $vars = get_defined_vars();
    $d = explode(':',$str) ;
    if (isset($vars[$d[0]]) || array_key_exists($vars[$d[0]])) {
        if (!empty($d[1]) && (isset($vars[$d[0]][$d[1]]) || array_key_exists($vars[$d[0]][$d[1]]))
            return $vars[$d[0]][$d[1]];
        return $vars[$d[0]];
    }
    return null;
}