PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen richtig deklarieren


eUncle
07.12.2006, 07:50:23
Hallo erstmal - bin "der neue"^^


Ich habe folgendes Script:

$A1_name = 'hansi';
$status_A1 = 'zuhause';



Nun will ich in den Variablen das jetzige "A1" durch eine Variable ersetzen - nennen wir die mal $bez
Dann würde das Script jetzt folgendermaßen aussehen:

$$bez_name = 'hansi';
$status_$bez = 'zuhause';

...doch hier kommt jetzt ein Parse-Error - doch was ist da jetzt falsch?


Danke.

BenniG.
07.12.2006, 09:40:47
Es gibt in PHP _leider_ variable Variablen, aber man sollte besser garnicht erst damit anfangen, sondern gleich mit Arrays (oder besser noch Klassen) arbeiten..

<?php
//Neues Array mit Leuten anlegen
$leute=array();

//Neue Person mit nachträglicher Belegung der Variablen
$person = array();
$person['name']="Hansi";
$person['status']="zuhause";

//Person dem Array hinzufügen
$leute[] = $person;

//Person mit numerischem Index anlegen
$person = array("Harald","Urlaub");
//Person dem Array hinzufügen
$leute[] = $person;

//Person mit assoziativem Index anlegen
$leute[] = array("name" => "Ursel","status" => "weg");

//Ausgabe
echo "<pre>";
//Alle Leute ausgeben
print_r($leute);
echo "<br>\r\n";
echo $leute[0]['name'] . "\r\n"; //Hansi
echo $leute[0]['status'] . "\r\n\r\n"; //zuhause
$person = $leute[2];
echo $person['name'] . "\r\n"; //Ursel

?>

Mageta
07.12.2006, 09:43:57
Ich hab jetzt zwar nich richtig verstanden wa sgenau du machen willst aber den Parsererror kann na leicht erklären

$bez_name = 'hansi';
$status_bez = 'zuhause';

so muss das ausschauen. Du hast da noch so Dollars reingemacht. Die setzt man aber nur an den Anfang von Variablen, nicht in der Mitte und nicht doppelt.

Was du jetzt allerdings mit ersetzen meinst weiß ich nich genau. Wen du den Inhalt von $A1_name und $status_A1 ersetzen willst dann musst du die auch wieder verwenden, oder raff ich das gerade net?

feuervogel
07.12.2006, 10:39:22
...doch hier kommt jetzt ein Parse-Error - doch was ist da jetzt falsch?


du versuchst ein wahrscheinlich überflüssiges und triviales problem auf einem viel zu umständlichen weg zu lösen.

ansonsten hilft google: http://www.php-faq.eu/7_6_de.html

eUncle
07.12.2006, 17:03:46
alles eigentlich falsch^^
Nehmts nicht übel...


Also nochmal von ganz vorn:

Ich habe folgendes Script:

$A1_name = 'hansi';
$status_A1 = 'zuhause';

überall wo jetzt "A1" steht, soll eine Variable rein!
d.h. dass das dann zusammen wieder die Variable geben soll!
z.B.
$bez = 'A1';
$[$bez]_name = 'hansi';
$status_[$bez] = 'zuhause';
...ich hab hier jetzt [$bez] hingesetzt, wo sonst "A1" stand!
Doch das funktioniert so nicht ganz!


@BenniG.: also das kann so doch nicht funktionieren?!

Wenn ich z.B. $$bez = 'hallo' mache und $bez = 'wort', dann wird 'hallo' ausgegeben, wenn ich echo $wort mache, d.h. die Variable wurde durch $-Zeichen und eine andere Variable zusammengesetzt
--> funktioniert - no problem!

Doch wenn ich jetzt "A1" bei
$A1_name = 'moin'
durch eine Variable ersetzen will, klappt das nicht mehr?!

BenniG.
07.12.2006, 17:06:43
Lese mal:
http://www.lugbz.org/documents/smart-questions_de.html#goal

Was willst du erreichen? Was ist dein Gesamtziel?
Variable Variablen sind die schlechteste Lösung die es gibt und zum glück in fast allen Sprachen nicht erlaubt...

eUncle
07.12.2006, 17:22:15
Erreichen will ich, wie oben beschrieben, dass ich das "A1" durch eine Variable ersetzen kann - mehr nicht!

BenniG.
07.12.2006, 17:28:05
Super..
Du machst eine Webseise die A1 durch eine Variable ersetzen kann, Herzlichen Glückwunsch..
Naja, da du absolut beratungsresistent bist:

${$bez . "_name"} = 'hansi';
${"status_" . $bez} = 'zuhause';


Absolut sinnfreu und macht nur Probleme, aber wenn du unbedingt willst..

eUncle
07.12.2006, 17:31:04
naja - was für Probleme können da auftreten?
z.B.?

Beratungsresistend bin ich wohl nicht ganz^^ doch das ist nun mal das, was ich suche, außer man kann das auch mit arrays machen?!

feuervogel
07.12.2006, 17:36:03
Erreichen will ich, wie oben beschrieben, dass ich das "A1" durch eine Variable ersetzen kann - mehr nicht!

wenn das der einzige sinn deines script ist, dann lass es einfach bleiben.

eUncle
07.12.2006, 17:37:02
@BenniG. also funktionieren würdes "prima"!
Nur, was für Störungen könnten unter Umständen auftreten? Und vor Allem warum?

wenn das der einzige sinn deines script ist, dann lass es einfach bleiben.
...man heißt mich ja ganz höflich "Herzlichen Willkommen" hrhr

BenniG.
07.12.2006, 17:40:49
Du kannst nicht gescheit zählen wieviele _names du hast, du musst immer die blöde {}-Syntax schreiben, kein Mensch blickt da durch ;)
Arrays:
Du kannst zählen wieviele Elemente in deinem Array sind (count) du kannst alle Elemente schön durchgehen (foreach) du kannst schön nach allem möglichen sortieren (usort)

Was hast du gegen

$speicher=array();
$speicher[$bez . "_name"] = "Hans";
$speicher["status_" . $bez] = "zuhause";


Damit kannst du die Array funktionen benutzen, richtig sinn macht aber

$speicher=array();
$person = array ("name" => "hansi", "status" => "zuhause");
$speicher[] = $person;

Damit hast du eine Person angelegt mit den Attributen name und status und hast sie in ein Array gepackt, damit kannst du z.B. die Personen schnell zählen, kannst die Personen easy nach ihren Namen oder Stati sortieren, filtern etc. etc. all das können variable Variablen nicht..

eUncle
07.12.2006, 18:24:02
zählen muss ich nicht!
aber wo anders, wo ich das auch gebrauchen könnte^^

Danke Dir - ich werd's mal versuchen!

btw. wie würde die ausgabe von dem letzten array-bsp dann aussehen?
d.h. eine ausgabe, wo's dir dann alle auflistet?

BenniG.
07.12.2006, 18:53:12
$speicher=array();
$person = array ("name" => "hansi", "status" => "zuhause");
$speicher[] = $person;
$speicher[] = array("name" => "horst", "status" => "arbeiten");
//zu debugzwecken:
echo "<pre>";
print_r($speicher);

//ein einzelnes Element:
echo $speicher[0]['name'] . "<br>";
echo $speicher[0]['status']. "<br>";

//alle Elemente:
for($i = 0; $i < count($speicher); $i++) {
echo "Name: " . $speicher[$i]['name'] . " - " . $speicher[$i]['status'] . "<br>";
}

// 2. Möglichkeit
foreach ($speicher as $eintrag) {
echo "Name: " . $eintrag['name'] . " - " . $eintrag['status'] . "<br>";
}

eUncle
07.12.2006, 19:11:49
danke dir, werd das script mal durch studieren....

feuervogel
07.12.2006, 21:29:17
@BenniG. also funktionieren würdes "prima"!
Nur, was für Störungen könnten unter Umständen auftreten? Und vor Allem warum?


...man heißt mich ja ganz höflich "Herzlichen Willkommen" hrhr

und du antwortest ja ganz ausführlich auf unsere fragen. wir (ich?) wollen dir nur zeigen, dass du das problem, das du hast, auch anders lösen kannst als mit dem umbenennen von variablennamen. wenn wir dir aber einen tipp geben wollen, wie das gehen könnte, müssen wir wissen, was du eigentlich vorhast. da du daraufhin antwortest, dass nur einen teil eines variablennamens ersetzten willst, ist meine antwort ein wenig grob, da es wirklich sinnfrei ist, ein script zu haben, in dem eine variable erzeugt wird und ihr name verändert wird und das danach fertig ist.

aber du scheinst es ja besser zu wissen, und baust dir lieber eine lösung für das (unbekannte) problem die absoluter bockmist ist.