开发者

Dynamic access to a PHP array

开发者 https://www.devze.com 2023-01-06 18:58 出处:网络
I tried to access with $this->$arrDataName[$key] on the element with the key $key from the array $this->$arrDataName. But PHP interpretes that wrong.

I tried to access with $this->$arrDataName[$key] on the element with the key $key from the array $this->$arrDataName. But PHP interpretes that wrong.

I tried it with { } around the $arrDataName to $this->{$arrDataName}[$key], but it doesn't work.

On php.net I found an advice, but I can't realize it.

In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if 开发者_开发问答you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.

Perhaps anyone can help me.

Thanks!

EDIT:

I think it doesn't work, but I forgot to fill the array.

Finally it works. :)

This is the solution: $this->{$arrDataName}[$key]


Your syntax is correct:

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

You can also use an extra variable for this:

$myTempArr = $this->$arrDataName;

$myTempArr[ $key ];

IMHO, readability is better that way...


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

This worked perfectly for me, it printed FooBar.


Let's assume your array is $this->arrDataName. You have a $key, so your object would be $this->arrDataName[$key].

If you want the contents of the variable which name is stored in $this->arrDataName[$key] you should do this:

<?php
    echo ${$this->arrDataName[$key]};
?>


Well, as far as I know, it works. Here how I tested it:

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

And the output:

b
y

Check correctness of $arrDataName. Turn on debuging and displaying PHP erros (including notices). Maybe you're trying to read non-existing property?

Also, which PHP version you use? I assume PHP5?

0

精彩评论

暂无评论...
验证码 换一张
取 消