Hallo,
Mein Ziel
Ich habe (fix) 3 Funktionen, in der ersten funktion wird (zbs.) "$mysql_data" mit einem MySQL->Fetch_array() belegt.
In der 2ten Funktion wird eine Templatedatei geparst, die wiederrum erkennt, in meinem Fall {&mysql_data->spalte} und ersetzt die in einerr 3ten Funktion namens this_array();
Das Problem
Der Array "$mysql_data" kommt in der letzten Funktion nicht an!
global $mysql_data; Kann ich in diesem Fall nicht anwenden, da der Variablenname dynamisch erzeugt wird.
Habe schon überlegt mit $GLOBALS zu arbeiten, suche aber jedoch nach einer Alternativen, wenn dies möglich ist.
Die Funktionen
Zum ersten habe ich die Fkt. proceed_mysql, eigentlich unrelevant, da hier nur die preg_replace's sind:
Dann die mysql_fetch, hier werden die Daten aus der MySQL-Datenbank in den dynamische Array geladen:
hier kann ich noch globals verwenden, aber in der nächsten Funktion nicht mehr.
Das wäre dann die Fkt. this_array();
Diese Funktion wird von der Fkt. parse(); aufgerufen, denn hier werden die {&mysql_data->spalte} "assigned"
Da die MySQL-Daten über die Funktion parse(); rutschen, gehen sie in der Fkt. this_array(); einfach verloren.
Lösung
Als Ansatz habe ich, wie oben schon gesagt, mir überlegt das ganze mit $GLOBALS-Variablen zulösen.
Ich suche aber noch eine Alternativ möglichkeit, falls vorhanden.
Mein Ziel
Ich habe (fix) 3 Funktionen, in der ersten funktion wird (zbs.) "$mysql_data" mit einem MySQL->Fetch_array() belegt.
In der 2ten Funktion wird eine Templatedatei geparst, die wiederrum erkennt, in meinem Fall {&mysql_data->spalte} und ersetzt die in einerr 3ten Funktion namens this_array();
Das Problem
Der Array "$mysql_data" kommt in der letzten Funktion nicht an!
global $mysql_data; Kann ich in diesem Fall nicht anwenden, da der Variablenname dynamisch erzeugt wird.
Habe schon überlegt mit $GLOBALS zu arbeiten, suche aber jedoch nach einer Alternativen, wenn dies möglich ist.
Die Funktionen
Zum ersten habe ich die Fkt. proceed_mysql, eigentlich unrelevant, da hier nur die preg_replace's sind:
PHP-Code:
function proceed_mysql($template)
{
$template = preg_replace_callback("/\{mysql query (.*) sql=\"(.*)\"}/sUi", array($this,"mysql_performquery"), $template);
$template = preg_replace_callback("/\{mysql fetch (.*) to (.*) (.*)\}/sUi", array($this,"mysql_fetch"), $template);
$template = preg_replace_callback("/\{mysql foreach (.*) to (.*) (.*)}(.*)\{\/mysql\}/sUi", array($this,"mysql_foreach"), $template);
return $template;
}
PHP-Code:
function mysql_fetch($vars)
{
global ${$vars[1]}, ${$vars[2]};
#print "Template::mysql_fetch -> Ressource \${$vars[1]} = " . ${$vars[1]} . " <br />";
if ($vars[3]=="assoc") $type = MYSQL_ASSOC;
elseif ($vars[3]=="num") $type = MYSQL_NUM;
elseif ($vars[3]=="both") $type = MYSQL_BOTH;
else $type = MYSQL_ASSOC; // end if
while ($data = mysql_fetch_array(${$vars[1]}, $type)) {
${$vars[2]}[$data["name"]] = $data["wert"];
}
}
Das wäre dann die Fkt. this_array();
Diese Funktion wird von der Fkt. parse(); aufgerufen, denn hier werden die {&mysql_data->spalte} "assigned"
PHP-Code:
function this_array($vars)
{
global ${$vars[1]};
return ${$vars[1]}[$vars[2]];
}
Lösung
Als Ansatz habe ich, wie oben schon gesagt, mir überlegt das ganze mit $GLOBALS-Variablen zulösen.
Ich suche aber noch eine Alternativ möglichkeit, falls vorhanden.
Kommentar