AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Hash-Arrays in Strings

Ein Thema von 3_of_8 · begonnen am 3. Jun 2006 · letzter Beitrag vom 3. Jun 2006
Antwort Antwort
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 02:28
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?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von titus
titus

Registriert seit: 5. Apr 2004
Ort: Freiburg
232 Beiträge
 
#2

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 02:45
einfach
Code:
echo $blubb['abc'];
?

Aber ich glaub nicht recht zu verstehen

mfG, titus
Daniel L.
'-'
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 06:43
Hallo!

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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 10:51
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 11:11
Hi,

wie sieht denn dein Array aus?

Müsste es nicht

Code:
object['hoverpicture']
bzw.

Code:
object["hoverpicture"]
heißen?
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 12:55
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?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 12:59
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 13:01
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. ^^
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 13:03
Danke fürs Testen. Dann schaun wir mal, ab zum Hardcore-Debuggen. Vielleicht liegt der Fehler auch anderswo.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: [PHP] Hash-Arrays in Strings

  Alt 3. Jun 2006, 13:48
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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