2010-07-13 41 views
5

Ich habe versucht, mit $this->$arrDataName[$key] auf das Element mit dem Schlüssel $key aus dem Array $this->$arrDataName zuzugreifen. Aber PHP interpretiert das falsch.Dynamischer Zugriff auf ein PHP-Array

Ich versuchte es mit { } um die $arrDataName zu $this->{$arrDataName}[$key], aber es funktioniert nicht.

Auf php.net habe ich einen Rat gefunden, aber ich kann es nicht realisieren.

Um Variablenvariablen mit Arrays zu verwenden, müssen Sie ein Mehrdeutigkeitsproblem lösen. Das heißt, wenn Sie $$ a [1] schreiben, muss der Parser wissen, ob Sie $ a [1] als Variable verwenden wollten, oder wenn Sie $$ a als Variable und dann den [1] Index von verwenden wollten diese Variable. Die Syntax zum Lösen dieser Mehrdeutigkeit lautet: $ {$ a [1]} für den ersten Fall und $ {$ a} [1] für den zweiten.

Vielleicht kann mir jemand helfen.

Danke!

EDIT:

Ich denke, es nicht funktioniert, aber ich habe vergessen, das Array zu füllen.
Schließlich funktioniert es. :)
Dies ist die Lösung: $this->{$arrDataName}[$key]

+0

Versuchen Sie, eine der Antworten zu akzeptieren, dann :) –

Antwort

5

Ihre Syntax korrekt ist:

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

Sie können auch eine zusätzliche Variable für diesen Einsatz:

$myTempArr = $this->$arrDataName; 

$myTempArr[ $key ]; 

IMHO, ist die Lesbarkeit besser auf diese Weise ...

+0

Danke für den Rat. Ich weiß so, aber ich suche nach der Ein-Zeilen-Lösung.;) – CSchulz

+0

Ich habe gerade die Syntax getestet, und sie ist korrekt. Vielleicht hast du ein anderes Problem ... – Macmade

+0

Ich habe mein Problem gefunden. Das angegebene Array war leer. -.- – CSchulz

0

Nehmen wir an, Ihr Array ist $this->arrDataName. Sie haben eine $key, also wäre Ihr Objekt $this->arrDataName[$key].

Wenn Sie den Inhalt der Variablen wollen die Namen in $this->arrDataName[$key] gespeichert Sie dies tun sollten:

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

Sorry, aber ich kann nicht herausfinden, wie das mir helfen wird. – CSchulz

0

Nun, soweit ich weiß, es funktioniert. Hier ist, wie ich es getestet:

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

Und die Ausgabe:

b 
y 

prüfen Korrektheit $arrDataName. Aktivieren Sie das Debuggen und Anzeigen von PHP-Fehlern (einschließlich Benachrichtigungen). Vielleicht versuchen Sie, nicht vorhandene Eigenschaft zu lesen?

Auch, welche PHP-Version verwenden Sie? Ich nehme PHP5 an?

+0

... und ein Kommentar - wenn es möglich ist, ist es besser, diese Magie nicht zu benutzen. Später wirst du Probleme haben zu verstehen, was du machen wolltest. Glauben Sie mir :) –

+0

Ich benutze PHP 5.3.1 und es gibt keine Fehler oder Hinweise. – CSchulz

+0

@ H3llGhost: Sie haben 'error_reporting' auf' E_ALL | gesetzt E_STRICT'? Und 'display_errors' ist aktiviert? – NikiC

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

Das perfekt für mich gearbeitet, gedruckt es FooBar.

+0

Ja, es hat auch für mich funktioniert. ;) Danke. – CSchulz

Verwandte Themen