Shop Support News Archive - Shopbetreiber News -> Forum : ECB: Probleme mit einem mehrstufigen Array
Hallo Leute,
ich habe hier ein Problem, an welchem ich fast verzweifle. Ich habe ein Script gebastelt, womit ich dem kunden Leasingpreis und leasingdauer zur verfügung stellen möchte. Dieses funktioniert auch einwandfrei bei der Produktanzeige. Nun zum Problem.
Ich möchte dieses Script auch bei den neuen Artikel auf der Startseite ausführen lassen, nur klappt es nicht. Ich habe darin drei Funktionen, wo einmal der Barpreis formatiert wird, wo einmal der gerätetyp ausgelesen wird und wo einmal eine CSV-Datei ausgelesen mit den ganzen Informationen der leasingfirma.
Das auslesen der CSV-Datei klappt und diese wird dann in ein Array Names HashMap gelesen. wenn ich nun in der Funktion mir diese ausgeben lasse klappt es. nun möchte ich dem array aber noch einen wert übergeben mit dem Barpreis. was dann so aussieht HashMap[funktionsname(parameter)]. Wenn ich jetzt aber mir dieses anzeigen lasse bekomme ich nichts.
Wenn ich das gleiche beim Artikel anzeigen lasse bekomme ich den Wert: "Array" ausgegeben
Warum nicht bei den neuenArtikel auf der Startseite.
Bitte helft mir.
Danke Christian
Dann schau Dir doch mal mit var_dump den Inhalt des Array an. Vielleicht kommst Du dann drauf. Wenn Du nur "Array" siehst, dann versuchst Du ein ganzes Array auszugeben und nicht nur ein Feld davon.
Hallo Ex-Entwickler,
ich habe das bei beiden ausprobiert bei der normalen Artikel-Anzeige bekomme ich folgende Ausgabe:
"array(8) { [24]=> string(6) "115.70" [30]=> string(5) "95.75" [36]=> string(5) "81.80" [42]=> string(5) "71.25" [48]=> string(5) "63.35" [54]=> string(5) "57.20" [60]=> string(5) "52.30" [""]=> string(0) "" } "
und bei den Neuen-Artikel auf der Startseite bekomme ich:
"NULL"
das heißt für mich jetzt, dass das Array leer ist. aber wie kann es bei dem einen funktionieren und bei dem anderen nicht???
Christian
Vielleicht hilft das weiter:
Ich habe jetzt in der Funktion die variable hashMap mit var_dump anzeigen lassen und siehe da es funktioniert. jetzt möchte ich aber die variable ausserhalb von der funktion nutzen können und habe diese somit als global deklariert. aber ausserhalb der funktion klappt es nicht!!!!!!!!!!! Da ist die variable wieder NULL
was kann ich jetzt machen????
Danke
Christian
Gültigkeit von Variablen in PHP:
http://de3.php.net/manual/de/language.variables.scope.php (http://anonym.to/?http://de3.php.net/manual/de/language.variables.scope.php)
Schau Dir das erst mal an ...
Also ich habe mir das angeschaut, habe aber nichts gefunden.
Hier mal die Funktion: Vielleicht hilft es ja wenn man das sieht.
function new($realPath) {
****global $Mappe, $lauf;
********
****$fp = fopen($realPath."datei.csv","r");
****$line = fgets($fp);
****
while ($line > "") {
************
if (substr($line,0,1) != "#" && trim($line) != "") { // Kommentare und Leerzeilen ignorieren
****************
****if (substr($line,0,3) == "XXX") { // Kopfzeile
****$lauf = split(";",$line);
****} else { //Preiszeile
****$lineArray = split(";",$line);
****for ($i=1;$i<sizeof($lineArray);$i++) {
****$Mappe[trim($lineArray[0])][trim($lauf[$i])] = trim($lineArray[$i]);
********************
********}
********************
************
****}
****************
****}
****$line = fgets($fp);
************
************
****************
****}
************fclose($fp);
****}
Das globale Array $Mappe soll ausserhalb der Funktion zur Verfügung stehen.
Bitte Code in Code-Tags einbetten -> http://www.ecombase.de/forum/style_images/1/folder_rte_images/code.gif
hein-tobi
23.07.2009, 22:43
Ich glaube es wird dir niemand bei so einem kleinen Codeschnipsel helfen können.
Wo rufst du was auf ?
Wieso denn nicht???? Dann Versuche ich es mal anders.
Ich habe eine Script welches ich per include einbinde in folgende Datei:
admin\includes\classes\categories.php
das Skript so aus:
<?
$laufzeiten = array();************// Simples Laufzeiten-Array
$Mappe = array();************// Zuweisungs-Array
function new($realPath) {
global $Mappe, $lauf;
$fp = fopen($realPath."datei.csv","r");
$line = fgets($fp);
while ($line > "") {
if (substr($line,0,1) != "#" && trim($line) != "") { // Kommentare und Leerzeilen ignorieren
if (substr($line,0,3) == "XXX") { // Kopfzeile
$lauf = split(";",$line);
} else { //Preiszeile
$lineArray = split(";",$line);
for ($i=1;$i<sizeof($lineArray);$i++) {
$Mappe[trim($lineArray[0])][trim($lauf[$i])] = trim($lineArray[$i]);
}
}
}
$line = fgets($fp);
}
fclose($fp);
}
function Barpreis($barPreis) {
********
********$barPreis = ($barPreis != NULL) ? trim($barPreis) : 0;
********
********$barNum = $barPreis+24.99;
********$faktor = floor($barNum/25);
********$result = $faktor 25;
********
********if (LO_BP > $result || HI_BP < $result) {
************
************$result = NULL;
********}
********
********return $result;
********
****}
$values = $Mappe[Barpreis($barPreis)];** //hier soll der Inhalt aus der Funktion new, welcher in der globalen Variable Mappe gespeichert wurde, übergeben werden.
Wenn ich jetzt ein echo oder var_daump davor setze bekomme ich nicht bzw. nur array(0) { }
Das sollte doch bestimmt jetzt reichen oder????
Bitte um konstruktive Ideen bzw. Lösungsvorschläge.
Danke
Christian
hein-tobi
24.07.2009, 09:03
/admin/includes/classes/categories.php ist eine Klasse und die Methoden der Klasse werden von aussen aufgerufen. Willst du beim Speichern eines Artikels deinen Code aufrufen ?
beim speichern eines artikels soll der code aufgerufen werden und mit in die datenbank gespeichert werden. Wenn ich mir die Variable in meiner Funktion mit echo anzeigen lasse funktioniert das auch. nur nicht ausserhalb der funktion.
hein-tobi
24.07.2009, 09:17
vielleicht die Mappe nicht global machen und am Ende der Funktion übergeben
function new($realPath) {
$Mappe = array();
...
return $Mappe;
}
$Mappe = $this->new();
$preis = $this->BarPreis($barPreis);
$values = $Mappe[$preis];
jetzt bekomme ich folgende Fehlermeldung:
Fatal error: Call to undefined method categories::new() in /mnt/web8/23/20/51712120/htdocs/admin/includes/classes/leasing:modul.php on line 82
in Zeile 82 steht das
$Mappe = $this->new();
und der Fehler besagt daß du das innerhalb der Klasse "categories" aufrufst und es dort keine Methode "new" gibt.
ein "var_dump($this)" sagt wahrscheinlich sowas wie "object cateogries"
useeme2ce
24.07.2009, 10:26
Bitte, liebe Thread-Ersteller - schreibt rein, zu welchem System eure Fragen sind.
Das kann doch nicht so schwer sein... grummel .
ECB im Titel ergänzt. Beim nächsten Mal "fehlen", ist das Ding dicht... :smiley_emoticons_aufsmaul:
Hallo yogi,
du hast recht. Könntest du mir bitte erklären wie ich das ändern kann.
die Meldung mit var_dump($this) sieht so aus
object(categories)#5 (0) { }
Ich habe wirklich keinen Plan was ich jetzt machen muß.
Hi,
1. Lerne PHP
2. Lerne was Objekte sind
3. Begreife was Methoden sind
4. Behebe das o.g. Problem
oder
1. Beauftrage jemand der sich damit auskennt.
tipp: Du hast entweder die Funktion new oder eine Methode new in einem anderen Objekt definiert!
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.