![]() |
[PHP] Hash-Arrays in Strings
Morgen.
Ich hatte gerade in PHP folgendes Problem: Ich habe ein Array und ich habe ein Template. Das Template wird mit ein bissel eval()-Gewurschtel eingelesen, wobei die darin enthaltenen Variablennamen durch die entsprechenden Werte ersetzt werden. Jetzt habe ich da ein Hash-Array mit einem Wert, sagen wir mal:
Code:
Wie soll ich das jetzt angeben? Ich kann mich erinnern, mal folgendes gesehen zu haben:
$blubb["abc"]="wuppdi";
Code:
Jetzt meine Fragen:
echo("$blubb[abc]");
1. Funktioniert das? 2. Wenn ja, ab welcher PHP-Version und von welchen Einstellungen hängt das ab? 3. Wenn es von Einstellungen abhängt, wie stelle ich die bei nem Win32 xampp ein? |
Re: [PHP] Hash-Arrays in Strings
einfach
Code:
?
echo $blubb['abc'];
Aber ich glaub nicht recht zu verstehen :? mfG, titus |
Re: [PHP] Hash-Arrays in Strings
Hallo!
Zitat:
Also ich würde echo $blubb['abc']; schreiben. 2. Also ich bin mir zu 99% sicher, dass dies auch mit PHP 3 funktioniert. Ältere PHP-Versionen sollte man sowieso schon lange verworfen haben. ;) 3. Also ich wüsste nicht, dass man den (assoziativen) Array-Support deaktivieren kann. :? Grüße Faux |
Re: [PHP] Hash-Arrays in Strings
Ihr versteht mich nicht.
Ich habe ein assoziatives array $object, das Informationen enthält. Ich habe jetzt folgendes Template:
Code:
Das Template wird so in eine Variable geladen:<span class="$object[title]"> <a style="overflow:hidden; position:absolute; left:$object[x]px; top:$object[y]px; width:$object[width]px; height:$object[height]px; leisch:1337;" href="main.php?obj=$object[title]&handleclick=$object[handleclick]" target="_blank"> $object[text]</a> </span> <span style="width:0px; height:0px; background:url($object[hoverpicture]);" /> <span style="width:0px; height:0px; background:url($object[clickpicture]);" /> <style type="text/css"> span.test A:hover { background:url($object[hoverpicture]) repeat scroll 0px 0px; z-index:3;} span.test A:active { background:url($object[clickpicture]) repeat scroll 0px 0px; z-index:3;} span.test A { background:url($object[picture]) repeat scroll 0px 0px; z-index:3;} </style> eval("\$objectbit.=\"".getTemplate("object")."\";" ); Das Problem an der Sache ist jetzt, dass die Stellen, an denen die Elemente des Arrays sein sollten, also dort, wo im Template $object[title] zum Beispiel steht, einfach nichts ist. Als gäbe es die Variable nicht. |
Re: [PHP] Hash-Arrays in Strings
Hi,
wie sieht denn dein Array aus? Müsste es nicht
Code:
bzw.
object['hoverpicture']
Code:
heißen?
object["hoverpicture"]
|
Re: [PHP] Hash-Arrays in Strings
Außerhalb eines Strings schon.
Normales echo: echo $variable; Echo mit Variablenname im String: echo "$variable"; Und bei Arrays: echo $array["blubb"]; Mit Variablenname: echo "$array[blubb]"; Könnte das bitte mal jemand auf seinem Webspace testen? |
Re: [PHP] Hash-Arrays in Strings
Zitat:
Schreibe mal die ganze eval-Sektion auf. Grüße Faux |
Re: [PHP] Hash-Arrays in Strings
Geht bei mir ohne Probleme.
Code:
Ausgabe:
<?php
$variable = "Blubb"; $array = array(); $array["blubb"] = "wuppdi"; ?> Normales echo: <?php echo $variable; ?> Echo mit Variablenname im String: <?php echo "$variable"; ?> Und bei Arrays: <?php echo $array["blubb"]; ?> Mit Variablenname: <?php echo "$array[blubb]"; ?> Zitat:
![]() Edit: URL-Tag zickt rum. ^^ |
Re: [PHP] Hash-Arrays in Strings
Danke fürs Testen. Dann schaun wir mal, ab zum Hardcore-Debuggen. Vielleicht liegt der Fehler auch anderswo.
|
Re: [PHP] Hash-Arrays in Strings
Hier mal ein Tipp: wenn du keine Variable im String hast, verwende ' anstatt ". Der Parser geht bei Strings, die von "" umschlossen sind, durch und ersetzt alle Variablen mit deren Wert. Es ist also viel langsamer, wenn du keine Variable in so einem Block drinsteht. Da ist es besser du sparst dem Parser die Arbeit und verwendest '.
Zum Code: das geht ab mindestens PHP3, und wenn du noch sowas verwendest wirds Zeit dass ich dir nen Exorzisten nach Hause schicke. Entweder PHP 4.4.2, oder 5.1.x, aber alles was aelter ist kannste zum Fenster rauswerfen; das is einfach nicht. Ich versteh ehrlich gesagt dein Problem nicht. Die Zeile hier:
Code:
muesste er ohne Probleme durcharbeiten. So, und jetzt kommt mal ein Tipp: mach in deinem Script ganz ganz ganz am Anfang folgendes:
eval("\$objectbit.=\"".getTemplate("object")."\";");
Code:
Dann verwendest du mal eine nicht initalisierte Variable:
error_reporting(E_ALL);
Code:
Wenn dir dein Server keine Warnung auszeigt, dann wird es Zeit eine lokale Entwicklungsumgebung einzurichten, in der error_reporting auf E_ALL und show_errors = 1 ist. Warum? Weil du ja sehn solltest, ob irgendwelche Fehler auftreten. Dann wuerde dir der Parser auch sagen, wenn was im eval() fehlschlaegt. Es ist zwar komplizierter zu debuggen, aber immerhin.
echo $foobar;
Und jetzt kommt noch ein gut gemeinter Tipp: Gib mal ordentlich Code her. Mit einer Zeile koennen wir nicht viel anfangen. Warum? Naja, die Zeile:
Code:
muesste so funktionieren, aber wenn der vollstaendige Code so aussieht:
eval("\$objectbit.=\"".getTemplate("object")."\";");
Code:
dann glaub ich dir auch dass da nichts drin steht, ne. da muss naemlich vor Zeile 3 noch ein
function getObjectBit()
{ $objectbit = ''; eval("\$objectbit.=\"".getTemplate("object")."\";"); return $objectbit; }
Code:
hin, sonst macht das ja keinen Sinn.
global $object;
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz