err und msg sind aber keine Daten.
Wenn ich es richtig verstanden habe, sind die Daten auch nicht immer gleich strukturiert. Im Beispiel da oben hast du zum Beispiel nur eine row. Was ist, wenn du eine ganze Liste zurückgeben willst? Wird das dann $arr['row'] = $list oder doch $arr['list']? Wie auch immer du darauf antwortest, der Empfänger dieses Arrays muss wissen was er da vor sich hat. Denn die Struktur selbst gibt darüber keine Auskunft.
Der Empfänger muss nicht nur die Daten analysieren, sondern vorher auch die Metadaten. Irgendeine Logik muss feststellen, ob die Daten überhaupt betrachtet werden sollten oder ob es einen Fehler gab (err/msg).
Das Wissen über Struktur und Bedeutung der Daten steckt also an mindestens zwei Stellen: In der Funktion und irgendwo außerhalb. Schlechtes Zeichen.
Im Moment ist das vielleicht kein Problem, alles ist noch recht überschaubar. Aber Code lebt, wächst und verändert sich. Demnächst willst du mehr als nur row zurückgeben oder noch irgendwelche Zustandsinformationen außer err. Was machst du dann? Erweiterst du die Logik, die $arr verarbeitet? Glaubst du, das du da in 5 Jahren noch durchsiehst? Oder ein Fremder?
Baue ein ordentliches Fehlerhandling ein, statt err und msg.
Kapsel die Daten und notwendiges Wissen darüber in Objekte.
Arraynamen "array['etc']" deklarieren
Einklappen
X
-
Warum keine gute Idee?Zitat von onemorenerd Beitrag anzeigenWas soll das werden? Vertippt?PHP-Code:array_push($arr, $arr['err']);
array_push($arr, $arr['msg']);
Übrigens keine gute Idee, Funktionen irgendwelche Datenstrukturen zurückgeben zu lassen, die außerhalb interpretiert werden müssen.
Bei der Suche nach "Eleganz im Detail" leider den Blick fürs Wesentliche verloren ...
Eine Funktion wird angesprochen, brechnet die Daten und gibt Sie zurück.
Was soll die Funktion denn sonst machen?
Direkte Ausgabe?
PS: Ja, vertippt :-P
Einen Kommentar schreiben:
-
Was soll das werden? Vertippt?PHP-Code:array_push($arr, $arr['err']);
array_push($arr, $arr['msg']);
Übrigens keine gute Idee, Funktionen irgendwelche Datenstrukturen zurückgeben zu lassen, die außerhalb interpretiert werden müssen.
Bei der Suche nach "Eleganz im Detail" leider den Blick fürs Wesentliche verloren ...
Einen Kommentar schreiben:
-
Man hätte sich auch einfach mal die Grundlagen über Arrays anschauen können. Denn nichts anderes ist das.Zitat von phpMorpheus2 Beitrag anzeigenJa, das wollte ich wissen.
Perfekt. Somit wieder ein haufen unnütze Arbeit unf Performance erspart!
Danke jungs. Ihr seit die besten

Einen Kommentar schreiben:
-
Ja, das wollte ich wissen.
Perfekt. Somit wieder ein haufen unnütze Arbeit unf Performance erspart!
Danke jungs. Ihr seit die besten
Einen Kommentar schreiben:
-
Wie schon gesagt wurde, wenn $x als array() definiert ist - dann kannst du
schreiben, ohne auch nur eine einzige dieser "Ebenen" explizit deklariert zu haben - das macht PHP bei deren erster Verwendung automatisch.PHP-Code:$x['blah'][47]['blubb'][] = $wert;
Und das letzte [] ist der "Ersatz" für array_push - es legt dort ein neues Array-Element an, und zählt dabei den nummerischen Index hoch.
Einen Kommentar schreiben:
-
Vergiss doch endlich bitte das array_push !!!!!
PHP-Code:$arr = array();
// $arr['err'] = array(); Unsinn!
// $arr['msg'] = array(); Unsinn!
$arr['row'] = array();
$arr['err'] = false;
$arr['msg'] = "Kein Fehler";
// array_push($arr, $arr['err']); Unsinn
// array_push($arr, $arr['msg']); Unsinn
while...
{
// array_push($arr['row'], $row);
$arr['row'][] = $row; // reicht dir doch zu 100%, oder?
}
// usw.
Zuletzt geändert von combie; 27.05.2009, 17:13.
Einen Kommentar schreiben:
-
Ok Kropff.
Also es ist so, dass ich eine Array als Return Wert zurück gebe mit den berechneten Daten.
So kann die Useroberfläche mit dem Design besser angepasst werden, wenn nur eine Array mit allen Informationen vorhanden ist und nicht alle Berechnungen etc. (Verständlich oder)
Nun wird in einer Funktion eine Array mit mehreren Werten gefüllt.
z.B. ob es einen Fehler gab.
Wenn ja, die Fehlernachricht.
Wenn es keinen Fehler gab, dann err=false und in die selbe Array werden dann die Daten gepackt.
eine fertige Array die als Return Wert zurückgegeben wird sieht z.B. so aus:
In dieser Array sind nun alle Daten die ich zur Anzeige brauche und schöpfe Sie auch daraus.PHP-Code:Array
(
[row] => Array
(
[0] => Array
(
[col] => 1
[status] => 4
[id] => 16
[timestamp] => 1239635577
[subject] => Test 1
)
[1] => Array
(
[col] => 1
[status] => 4
[id] => 17
[timestamp] => 1232368569
[subject] => Test 2
)
[2] => Array
(
[col] => 2
[status] => 0
[id] => 20
[timestamp] => 1239635455
[subject] => Test 4
)
)
[err] => false
[msg] => Kein Fehler
)
Ist kein Fehler vorhanden, so wird [row] durchgegangen und alle Einträge werden als Liste aufgelistet usw.
Wenn ich in meinem Code nun MEHR als nur [err] und [msg] definiere,
weil ich z.B. mehrere Informationen brauche,
so möchte ich nicht immer alle $arr['err'] $arr['msg'] usw. extra definieren müssten!
Code (vereinfacht, freihand):
Ich muss für jede Unterebene der Variable deklarieren, damitPHP-Code:$arr = array();
$arr['err'] = array();
$arr['msg'] = array();
$arr['row'] = array();
$arr['err'] = false;
$arr['msg'] = "Kein Fehler";
array_push($arr, $arr['err']);
array_push($arr, $arr['msg']);
while...
{
array_push($arr['row'], $row);
}
// usw.
array_push als Argument eine Array vorliegen hat.
Das die Funktion als Argument eine Array braucht ist ja nicht das Problem.
Es geht mir nur darum, alles zu deklarieren, anstatt einfach NUR $arr als Array
zu deklarieren und somit auch alle etweigen unterbenen die erstellt werden.
Natürlich ist es logisch, dass es nicht so ist!
Ich suche aber eine Möglichkeit, dies zu bewerkstelligen.
Hoffe, es hilft
Einen Kommentar schreiben:
-
Korrekt!Wenn ich "$var = 'hello'" schreibe und irgendein Honk schreibt weiter unten im Code (aus Versehen?) "$var = array('hello', 'world')" – kann ich doch nichts gegen machen?
Und genau darum sollte man grundsätzlich auf globale Variablen verzichten.
Das ist eine einfache Möglichkeit, um unerwünschte Seitenefekte zu vermeiden.
Einen Kommentar schreiben:
-
Ich misch mich einfach mal kackendreist ein…
Aber ist es nicht so (mein Kentnissstand ist nicht besoders hoch, man verzeihe mir Missverständnisse), dass man in PHP Variablen garnicht "fest" deklarieren kann?
Wenn ich "$var = 'hello'" schreibe und irgendein Honk schreibt weiter unten im Code (aus Versehen?) "$var = array('hello', 'world')" – kann ich doch nichts gegen machen?
Einen Kommentar schreiben:
-
sind denn die unterebenen bekannt? und auch deren struktur? sag mal, was du konkret vorhast. vielleicht hilft das meinem verständnis auf die sprünge.
peter
Einen Kommentar schreiben:
-
Natürlich steht das im Manual.Zitat von onemorenerd Beitrag anzeigenWeil $arr['etc'] kein Array ist und die Funktion array_push() eben so implementiert ist, dass es dann eine Notice gibt. Steht doch im Manual.
Das war auch nicht die Frage, wie array_push() funktioniert,
sondern ob es eine Möglichkeit gibt, eine definierte Array "samt aller Unterebenen" als array zu deklarieren!
Einen Kommentar schreiben:
-
Na weil er doch auch andere Wege sucht. Und sich weiter entwickeln will. Der OOP-Ansatz war ja nur ein Beispiel. Von mir aus kann er seine Daten nur in a und b codiert ablegen. Hauptsache es macht ihm Spaß.Zitat von phpMorpheus2 Beitrag anzeigen...
Ich suche nur sehr oft nach verbesserungsmöglichkeiten um alles komfortabler
und sauberer programmieren zu können.
Ich kann ein sehr schönen Algo haben, dennoch versuche ich immer wieder
etwas zu verbessern.
...
Einen Kommentar schreiben:
-
@phpMorpheus2
fixier dich nicht auf array_push. das brauchst du in javascript ständig, aber nicht in php. da kannst du viel einfacher vorgehen.
es muss doch nicht alles in oop gemacht werden. arrays sind wunderbar geeignet, um datenstrukturen abzubilden. also warum nicht damit arbeiten?Vielleicht fällt dir ja eine schöne Klassen-Konstruktion ein.
peter
Einen Kommentar schreiben:
-
Wenn man error_reporting auf E_ALL hat :P
@phpMorpheus2: Unsere Aussagen decken sich ja dann doch. Ich wollte dich nur mal anstubsen, dass du vielleicht außerhalb der Array-Welt schaust, ob es da eine bessere Lösung für dein Problem gibt. Wobei "besser" hier wohl als "schöner" zu interpretieren ist. Vielleicht fällt dir ja eine schöne Klassen-Konstruktion ein...
Einen Kommentar schreiben:
Einen Kommentar schreiben: