Variable aus Variablen generieren?

Torsten Ernst

Mitglied
Hallo,

ich hole mir einen Namen der in einer, zwei, oder allen drei zur Verfügung stehenden XML-Dateien (A.xml, B.xml, C.xml) enthalten ist und habe für diese verschiedene Variablen festgelegt. Zum auswählen und anzeigen habe ich im Moment folgenden Code laufen der auch soweit funktioniert.

PHP:
if ($Aname[1])
{
echo "$Aname[1]";
}
elseif ($Bname[1])
{
echo "$Bname[1]";
}
elseif ($Cname[1])
{
echo "$Cname[1]";
}

Der Reihenfolge nach werden die Variablen abgefragt und je nachdem wo ein Name hinterlegt ist, wird dieser angezeigt z.B. "Max".
Jetzt soll aber noch zusätzlich der jeweils ausgewählte Name als neue Variable z.B. $name festgelegt werden, sodass bei Aufruf von echo"$name"; der Name "Max" angezeigt wird. Ich bekomme es nicht hin, kann mir bitte jemand helfen?

Vielen Dank, Torsten
 
Wenn ich das richtig verstehe, möchtest du schauen, ob ein Name in einer der verfügbaren Dateien steht, richtig?

Dann mach doch nach dem echo noch eine Zuweisung, also

PHP:
echo "$Aname[1]";
$name = $Aname[1];
 
Danke für deine schnelle Antwort. Ich weiß ja nicht, welche von den drei if- Anweisungen zutrifft. Oder Moment, wenn ich deinen Eintrag bei allen dreien einfüge ist "$name" auf jeden Fall zugewiesen. Müsste funktionieren. Am besten wäre es ja, wenn man die if-Anweisungen beibehält und nur eine statt drei echo-Anweisungen hätte, also nur einmal echo"$name"; Gedanklich in etwa so:

$name="..meine if-Anweisungen...";
echo "$name";

Der Code wäre kürzer und ich könnte die Variable an anderen Stellen verwenden und kann dann sicher sein, das ein Name hinterlegt ist. Ist so etwas in dieser Art überhaupt umsetzbar oder muss man da ganz anders ran gehen?

MfG, Torsten
 
Upps, das ging ja fix. Kaum habe ich die erste Antwort geschrieben kommt der zweite Beitrag, super. Dank auch an "Registrierer". Ich denke das passt. Das Ganze dreimal mit entsprechender Änderung A, B, C und dann müßte es laufen, ich teste das mal.

MfG, Torsten
 
So genau wird das nicht gehen ;)

Du könntest es mithilfe einer bedingten Zuweisung (Ternärer Operator) realisieren.

Dies sähe dann (in der Kombination von Registrierers Beitrag) etwa so aus:

PHP:
$name = '';
$name = ($name == '' && $Aname[1] != '') ? $Aname[1] : $name;
$name = ($name == '' && $Bname[1] != '') ? $Bname[1] : $name;
$name = ($name == '' && $Cname[1] != '') ? $Cname[1] : $name;
echo $name;

Erläuterung zur Bedingten Zuweisung:(aus http://de.wikibooks.org/wiki/Websiteentwicklung:_PHP:_Variablen#Initialisierung)

Bedingte Zuweisung
Eine bedingte Zuweisung (auch: ternärer Operator) kombiniert eine Abfrage mit einer Zuweisung:

PHP:
$wert = ($frage) ? $wahr : $falsch;

Wenn $frage wahr oder ein Äquivalent dazu ist, so wird der Variable $wert der Wert von $wahr zugewiesen, ansonsten der Wert von $falsch. Dabei können alle Variablen auch direkte Werte, Konstanten oder Ausdrücke sein. Diese Schreibweise ist für einfache Abfragen kompakter, als das Äquivalent über if-Abfragen:

PHP:
if ($frage)
{
  $wert = $wahr;
}
else
{
  $wert = $falsch;
}

Das folgende Beispiel weist der Variable nur einen Standard-Wert zu, wenn sie nicht existiert, also nicht deklariert wurde.

PHP:
$wert = (isset($wert)) ? $wert : "standard";
 
dan mach doch einfach
PHP:
if ($Aname[1])
{
$name= $Aname[1];
}
elseif ($Bname[1])
{
$name =$Bname[1];
}
elseif ($Cname[1])
{
$name= $Cname[1];
} 
echo "$name";

edit:: zu spät xd
 
Zuletzt bearbeitet:
Genial, es funktioniert! :) Und wieder habe ich etwas dazu gelernt. Super Forum, Danke.

P.S. Was meinst du mit "zu spät xd" I2oxxi?

MfG, Torsten
 
PHP:
$name = '';
$name = ($name == '' && $Aname[1] != '') ? $Aname[1] : $name;
$name = ($name == '' && $Bname[1] != '') ? $Bname[1] : $name;
$name = ($name == '' && $Cname[1] != '') ? $Cname[1] : $name;
echo $name;

ist eigentlich das gleiche, vom sinn her, deswegen zu spät ^^
da wird halt einfach entweder der wert geändert oder "auf sich selbst gesetzt", will jetz nichts falsches sagen, aber das ist glaube ich sowas wie ne kurzschreibform für if ... else.... ohne else if.
und drei if ... else .... kann man halt auch genau in if ...elseif... elseif ... übersetzen ^^
(bischen unverständlich ausgedrückt glaub ich x_x)

als beispiel, sein code würde in "langform" so aussehen:
PHP:
$name = '';
if ($name=='' && $Aname[1]!='')
{
$name= $Aname[1];
}
else
{
$name=$name
}

// das gleiche dann halt für b und cname noch dahinter, spar ich mit jetz ^^

wie oben steht kannse das ganze so lesen:
Variable = (irgendwas mit boolrückgabe) ? ERGEBNIS_WENN_TRUE : ERGEBNIS_WENN_FALSE;
 
Zuletzt bearbeitet:
Ihr macht das leben wieder mal komplizierter als es ist. Einfache Array-Funktionen lösen doch das Problem
PHP:
$name = $aname + $bname + $cname;
Und alle namen sind richtig gesetzt. Mit einer Zeile

Hier der Beweis:
PHP:
//Simulation der Daten
//A
$aname[1] = 'a1';
$aname[3] = 'a3';
//B
$bname[1] = 'b1';
$bname[2] = 'b2';
//C
$cname[1] = 'c1';
$cname[4] = 'c4';

//Hier ist der wichtige Code-Teil
//Arrays vereinigen. $aname hat Prio 1, $bname Prio 2 etc.
$name = $aname + $bname + $cname;

//Zur schöneren Ausgabe nach Index sortieren
ksort($name);
print_r($name);

//Awendungsbeispiel wie du es hat
echo "Der Name mit dem Index 1 lautet '{$name[1]}'";

Ausgabe:
Code:
Array
(
    [1] => a1
    [2] => b2
    [3] => a3
    [4] => c4
)
Der Name mit dem Index 1 lautet 'a1'
 
Zurück