Arraynamen "array['etc']" deklarieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    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...

    Kommentar


    • #17
      @phpMorpheus2
      fixier dich nicht auf array_push. das brauchst du in javascript ständig, aber nicht in php. da kannst du viel einfacher vorgehen.
      Vielleicht fällt dir ja eine schöne Klassen-Konstruktion ein.
      es muss doch nicht alles in oop gemacht werden. arrays sind wunderbar geeignet, um datenstrukturen abzubilden. also warum nicht damit arbeiten?

      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #18
        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.

        ...
        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ß.

        Kommentar


        • #19
          Zitat von onemorenerd Beitrag anzeigen
          Weil $arr['etc'] kein Array ist und die Funktion array_push() eben so implementiert ist, dass es dann eine Notice gibt. Steht doch im Manual.
          Natürlich steht das 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!

          Kommentar


          • #20
            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
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #21
              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?
              This is what happens when an unstoppable force meets an immovable object.

              Kommentar


              • #22
                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?
                Korrekt!
                Und genau darum sollte man grundsätzlich auf globale Variablen verzichten.
                Das ist eine einfache Möglichkeit, um unerwünschte Seitenefekte zu vermeiden.
                Wir werden alle sterben

                Kommentar


                • #23
                  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:
                  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

                  In dieser Array sind nun alle Daten die ich zur Anzeige brauche und schöpfe Sie auch daraus.

                  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):
                  PHP-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. 
                  Ich muss für jede Unterebene der Variable deklarieren, damit
                  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

                  Kommentar


                  • #24
                    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.
                    Wir werden alle sterben

                    Kommentar


                    • #25
                      Wie schon gesagt wurde, wenn $x als array() definiert ist - dann kannst du
                      PHP-Code:
                      $x['blah'][47]['blubb'][] = $wert
                      schreiben, ohne auch nur eine einzige dieser "Ebenen" explizit deklariert zu haben - das macht PHP bei deren erster Verwendung automatisch.

                      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.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #26
                        Ja, das wollte ich wissen.
                        Perfekt. Somit wieder ein haufen unnütze Arbeit unf Performance erspart!

                        Danke jungs. Ihr seit die besten

                        Kommentar


                        • #27
                          Zitat von phpMorpheus2 Beitrag anzeigen
                          Ja, das wollte ich wissen.
                          Perfekt. Somit wieder ein haufen unnütze Arbeit unf Performance erspart!

                          Danke jungs. Ihr seit die besten
                          Man hätte sich auch einfach mal die Grundlagen über Arrays anschauen können. Denn nichts anderes ist das.

                          Kommentar


                          • #28
                            PHP-Code:
                            array_push($arr$arr['err']);
                            array_push($arr$arr['msg']); 
                            Was soll das werden? Vertippt?

                            Ü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 ...

                            Kommentar


                            • #29
                              Zitat von onemorenerd Beitrag anzeigen
                              PHP-Code:
                              array_push($arr$arr['err']);
                              array_push($arr$arr['msg']); 
                              Was soll das werden? Vertippt?

                              Ü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 ...
                              Warum keine gute Idee?
                              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

                              Kommentar


                              • #30
                                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.

                                Kommentar

                                Lädt...
                                X