代码之家  ›  专栏  ›  技术社区  ›  CSchulz cL83

动态访问PHP数组

  •  5
  • CSchulz cL83  · 技术社区  · 16 年前

    我试着用 $this->$arrDataName[$key] $key 从阵列中 $this->$arrDataName . 但PHP对此的解释是错误的。

    我试过了 { } $arrDataName $this->{$arrDataName}[$key] ,但不起作用。

    在php.net上我找到了一个建议,但我没有意识到。

    为了在数组中使用变量,必须解决一个模糊问题。也就是说,如果您编写了$$a[1],那么解析器需要知道您是想使用$a[1]作为变量,还是想使用$$a作为变量,然后使用该变量的[1]索引。解决这种歧义的语法是:${$a[1]}第一种情况,${$a}[1]第二种情况。

    也许有人能帮我。

    谢谢!

    编辑:


    终于成功了。:)

    4 回复  |  直到 16 年前
        1
  •  5
  •   Macmade    16 年前

    您的语法正确:

    $this->{$varName}[$key]
    

    您还可以为此使用一个额外的变量:

    $myTempArr = $this->$arrDataName;
    
    $myTempArr[ $key ];
    

        2
  •  2
  •   NikiC    16 年前
    <?php
        class Foo {
            public function __construct() {
                $this->myArray = array('FooBar');
                $arrayName = 'myArray';
                echo $this->{$arrayName}[0];
            }
        }
        new Foo;
    

    这对我来说非常有效,它是印刷的 FooBar .

        3
  •  0
  •   Bogdan Constantinescu    16 年前

    假设你的数组是 $this->arrDataName . 你有一个 $key 所以你的目标是 $this->arrDataName[$key]

    如果您需要存储名称的变量的内容 $此->arrDataName[$key] 您应该这样做:

    <?php
        echo ${$this->arrDataName[$key]};
    ?>
    
        4
  •  0
  •   Tomasz Struczyński    16 年前

    嗯,据我所知,这是可行的。下面是我如何测试的:

    <?php
    class tis
    {
        var $a = array('a', 'b', 'c');
        var $b = array('x', 'y', 'z');
    
        public function read($var)
        {
            echo $this->{$var}[1].'<br />';
        }
    }
    
    $t = new tis();
    $t->read('a');
    $t->read('b');
    ?>
    

    以及输出:

    b
    y
    

    检查数据的正确性 $arrDataName . 启用调试和显示PHP错误(包括通知)。也许你在读不存在的财产?

    另外,您使用哪个PHP版本?我猜PHP5?