Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Hash-Arrays in Strings (https://www.delphipraxis.net/70704-%5Bphp%5D-hash-arrays-strings.html)

3_of_8 3. Jun 2006 01:28


[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:
$blubb["abc"]="wuppdi";
Wie soll ich das jetzt angeben? Ich kann mich erinnern, mal folgendes gesehen zu haben:

Code:
echo("$blubb[abc]");
Jetzt meine Fragen:
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?

titus 3. Jun 2006 01:45

Re: [PHP] Hash-Arrays in Strings
 
einfach
Code:
echo $blubb['abc'];
?

Aber ich glaub nicht recht zu verstehen :?

mfG, titus

faux 3. Jun 2006 05:43

Re: [PHP] Hash-Arrays in Strings
 
Hallo!

Zitat:

Zitat von 3_of_8
Code:
echo("$blubb[abc]");
Jetzt meine Fragen:
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?

1. Also da echo ein Sprachkonstrukt ist, brauchst du mal die Klammern nicht bindend. Desweiteren kannst du dei Stringdelimiter weglassen, da du ja nur eine Variable ansprichst und somit ein paar millisekunden Parsing wegfallen. Dann solltest du jedoch abc zu einem String machen (könnte ja ev. auch ne Konstatnte sein; dann würde der Wert der Konstante eingesetzt werden).
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

3_of_8 3. Jun 2006 09:51

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:

<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>
Das Template wird so in eine Variable geladen:
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.

Matze 3. Jun 2006 10:11

Re: [PHP] Hash-Arrays in Strings
 
Hi,

wie sieht denn dein Array aus?

Müsste es nicht

Code:
object['hoverpicture']
bzw.

Code:
object["hoverpicture"]
heißen?

3_of_8 3. Jun 2006 11:55

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?

faux 3. Jun 2006 11:59

Re: [PHP] Hash-Arrays in Strings
 
Zitat:

Zitat von 3_of_8
Könnte das bitte mal jemand auf seinem Webspace testen?

Schreibe mal bitte einen vollständigen Code. So wie du es geschrieben hast, funktioniert das 100%ig, da ich das auf meiner Webseite mindestens 100 mal so habe. ;)
Schreibe mal die ganze eval-Sektion auf.

Grüße
Faux

Matze 3. Jun 2006 12:01

Re: [PHP] Hash-Arrays in Strings
 
Geht bei mir ohne Probleme.

Code:
<?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]"; ?>
Ausgabe:

Zitat:

Normales echo: Blubb Echo mit Variablenname im String: Blubb Und bei Arrays: wuppdi Mit Variablenname: wuppdi
Siehe hier.


Edit: URL-Tag zickt rum. ^^

3_of_8 3. Jun 2006 12:03

Re: [PHP] Hash-Arrays in Strings
 
Danke fürs Testen. Dann schaun wir mal, ab zum Hardcore-Debuggen. Vielleicht liegt der Fehler auch anderswo.

alcaeus 3. Jun 2006 12:48

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:
eval("\$objectbit.=\"".getTemplate("object")."\";");
muesste er ohne Probleme durcharbeiten. So, und jetzt kommt mal ein Tipp: mach in deinem Script ganz ganz ganz am Anfang folgendes:
Code:
error_reporting(E_ALL);
Dann verwendest du mal eine nicht initalisierte Variable:
Code:
echo $foobar;
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.

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:
eval("\$objectbit.=\"".getTemplate("object")."\";");
muesste so funktionieren, aber wenn der vollstaendige Code so aussieht:

Code:
function getObjectBit()
{
  $objectbit = '';
  eval("\$objectbit.=\"".getTemplate("object")."\";");
  return $objectbit;
}
dann glaub ich dir auch dass da nichts drin steht, ne. da muss naemlich vor Zeile 3 noch ein
Code:
global $object;
hin, sonst macht das ja keinen Sinn.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz