1

配列からいくつかのphpコードに特定のインデックスを送信して、結合する必要のあるデータを記述しようとしています。私が抱えている問題は、SESSIONが関数Str_To_Array内で使用できないように見えることです。ここでスコープについて何が欠けていますか?また、誰かがより良い方法を勧めることができれば、私はとても感謝しています。PS iは、関数を含めると異常が発生する場合に備えて、インクルードを追加しました。

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) ;
4

2 に答える 2

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();
于 2012-12-05T01:13:27.257 に答える
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;
}
于 2012-12-05T01:36:17.033 に答える