Ankündigung

Einklappen
Keine Ankündigung bisher.

Schleifen Problem mit den Arrays - Logikproblem

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

  • Schleifen Problem mit den Arrays - Logikproblem

    Hallo,

    ich sag es gleich, ich habe die Grundlagen schon gelesen aber nicht gerafft.
    Nun habe ich mir zum Thema Arrays und schleifen mir folgende Aufgabe gestellt
    (siehe die Kommentare).
    Mit Variablen habe ich so kein Problem damit komme ich klar. Aber mit Arrays siehts schon schlimmer aus.
    Sinn des ganzen ist das ich alle Namen in den Arrays vergleichen kann. Aber die Unterschiede feststellen.
    als Beispiel
    Moni ist in der Gruppe A und C aber nicht in Gruppe B = -Falsch, Zeige mir den Namen an
    Alex ist in Gruppe A und B und C = Richtig / dort vorhanden - hat alles seine Ordnung, braucht man nicht ausgeben
    Alex ist in Gruppe A und B = auch Richtig / dort vorhanden - hat alles seine Ordnung, braucht man nicht ausgeben

    PHP-Code:
    <html>
    <body>
    <?php
    /* um was es hier gehen soll
    * alle Mitglieder sind in gruppe a
    * einige von denen sind vielleicht auch zusätzlich in gruppe b und c
    * bestimmte mitglieder sollen aber nur in c sein, wenn sie auch in
    * gruppe b sind
    * aufgabe: suche mir alle mitglieder die in c sind aber
    * nicht in  b sind.
    */
    $mitgliederA = array("magda""leo""tobi""achim""olaf""sven""gerda""ulli");
    $mitgliederB = array("magda""tobi""olaf""sven""gerda""ulli");
    $mitgliederC = array("magda""leo""olaf""sven""gerda");

    //Mein erster Lösungsansatz
    if ($mitgliederB != $mitgliederA AND   $mitgliederB != $mitgliederC)
    while (
    $mitgliederB <= $mitgliederC)
      {
      echo 
    'Folgende Mitglieder sind in Gruppe B und auch C <br /> ';
      echo 
    $mitglieder// <-- hier bin ich geistig ausgestiegen
      
    }

    //mein zweiter Gedankenansatz
    if (in_array($mitgliederA$mitgliederC)){
      echo 
    'ist nicht dabei';
      }
      else
      {
        echo 
    'ist dabei<br />';
        
    // Ja wer denn eigentlich?
      
    }

    // mein dritter Gedankengang, klappt nicht da wieder alle da sind
    foreach ($mitgliederA as $key => $name)
      {
      
    $mitgliederA[$key] = $name;
      echo 
    'dabei ist ';
      echo 
    "$name<br>";
      }

    /*Erkenntnis:
    * ich muss erstmal aus dem array $mitgliederA die Namen raus holen und dann
    * erst vergleichen
    */
    ?>
    </body>
    </html>
    Mein Problem ich weiß nicht wann ich was machen muss, das wie weiß ich, aber ich kann mangels Knowhow nicht wissen wann ich was mache.
    Folgende Anlaufstellen hatte ich angesteuert,
    - Schattenbaum
    -tut.php-quake.net
    -peterkropff.de/site/php/
    -php-einfach.de
    -php-kurs.com

    Ich möchte von Euch jetzt nicht die 100% Lösung haben, sondern eher eine Erklärung wie man am besten an die Sache ran gehen sollte. Logische Denkweise in Schritten und so. Irgendwie brauche ich das doch um effektiver rum programmieren zu können. Falls ich ganz falsch an die Sache ran gegangen bin sagt mir das doch bitte auch.
    (zB. Vielleicht hätte ich switch statt while nehmen sollen?)

    Danke jedenfalls schon mal fürs lesen, Ich hoffe ich habe alles so optimal für Euch dargestellt wie es nur möglich ist.

    edit: PS: wie kann ich Mister Ad in meine Ignorre List einfügen?
    edit2: Werte in den Arrays in " gesetzt.


  • #2
    Tut mir leid, aber du brauchst die Grundlagen, ganz dringend. Wenn du das noch nicht verstanden hast, lies es dir nocheinmal durch.

    Mein Problem ich weiß nicht wann ich was machen muss, das wie weiß ich, aber ich kann mangels Knowhow nicht wissen wann ich was mache.
    Und genau das kommt dann schon von alleine.

    Folgende Anlaufstellen hatte ich angesteuert,
    - Schattenbaum
    -tut.php-quake.net
    -php-einfach.de
    Such dir eines heraus und arbeite es komplett durch. Immer lesen und gleich danach ausprobieren. Sonst wird das nichts.

    (zB. Vielleicht hätte ich switch statt while nehmen sollen?)
    Das sind zwei vollkommen unterschiedliche Dinge. while ist eine Schleife, die wird - sofern die Begindung in der Klammer erfüllt ist - mehrmals ausfeführt. switch dient zur Fallunterscheidung.

    Die Stings (in den Arrays) gehören in Anführungszeichen.

    Zu deinen Gedankengängen:
    PHP-Code:
    if ($mitgliederB != $mitgliederA AND   $mitgliederB != $mitgliederC)
    while (
    $mitgliederB <= $mitgliederC)
      {
      echo 
    'Folgende Mitglieder sind in Gruppe B und auch C <br /> ';
      echo 
    $mitglieder// <-- hier bin ich geistig ausgestiegen
      

    Aua! $mitgliederA, $mitgliederB und $mitgliederC sind ganz unterschiedliche Arrays, natürlich sind die nicht gleich (!=). Die while-Schleife ist mir dann aber auch irgendwie zu hoch. Du vergleichst 2 Arrays. Da könnte ich dich genauso gut fragen: "Ist Auto größer gleich Bier?"

    PHP-Code:
    if (in_array($mitgliederA$mitgliederC)){
      echo 
    'ist nicht dabei';
      }
      else
      {
        echo 
    'ist dabei<br />';
        
    // Ja wer denn eigentlich?
      

    in_array() schaut, ob ein Element in einem Array enthalten ist. Da du 2 Arrays mitgibst, kann das gar nichts werden.

    Eigentlich brauche ich gar nicht mehr weiter zu machen. Was dein Ziel ist habe auch noch nicht so wirklich verstanden. Tu dir bitte selbst einen Gefallen und http://www.php.de/php-einsteiger/489...rundlagen.html.

    Kommentar


    • #3
      Zitat von OneMercy Beitrag anzeigen
      Tut mir leid, aber du brauchst die Grundlagen, ganz dringend. Wenn du das noch nicht verstanden hast, lies es dir nocheinmal durch.

      ... Und genau das kommt dann schon von alleine.
      Mach ich versprochen !
      Ich habe nur manchmal die Befürchtung das einiges "unstimmig" sein könnte.
      Weil Seite "A" so schreibt Seite "B" aber wieder so rum, und Seite "C" wieder komplett anders.

      Zitat von OneMercy Beitrag anzeigen
      Die Stings (in den Arrays) gehören in Anführungszeichen.
      Ohje hast recht ein ganz derbes "Aua", so ist ja alles gleich zum scheitern verurteilt.

      Zitat von OneMercy Beitrag anzeigen
      Zu deinen Gedankengängen:
      PHP-Code:
      if ($mitgliederB != $mitgliederA AND   $mitgliederB != $mitgliederC)
      while (
      $mitgliederB <= $mitgliederC)
        {
        echo 
      'Folgende Mitglieder sind in Gruppe B und auch C <br /> ';
        echo 
      $mitglieder// <-- hier bin ich geistig ausgestiegen
        

      Aua! $mitgliederA, $mitgliederB und $mitgliederC sind ganz unterschiedliche Arrays, natürlich sind die nicht gleich (!=). Die while-Schleife ist mir dann aber auch irgendwie zu hoch. Du vergleichst 2 Arrays. Da könnte ich dich genauso gut fragen: "Ist Auto größer gleich Bier?"
      Nun ich nahm an von der (meiner) Logik her das ich Arrays vergleichen kann und mir Differenzen ausgeben könnte.
      Zitat von OneMercy Beitrag anzeigen
      PHP-Code:
      if (in_array($mitgliederA$mitgliederC)){
        echo 
      'ist nicht dabei';
        }
        else
        {
          echo 
      'ist dabei<br />';
          
      // Ja wer denn eigentlich?
        

      in_array() schaut, ob ein Element in einem Array enthalten ist. Da du 2 Arrays mitgibst, kann das gar nichts werden.
      Ich dachte das die Werte die im Array $mitgliederA sind, zum Vergleich von $mitgliederC heran genommen werden können.
      Natürlich hätte ich statt $mitgliederA den Namen einzeln eintragen können
      Hätte ich 1655 Namen, müsste ich dann 1655 "if (in_array" Bedingungen basteln?

      In etwa so
      PHP-Code:
      if (in_array"Ulli"$mitgliederC)){
        echo 
      'ist nicht dabei';
        }
        else
        {
          echo 
      'ist dabei<br />';
         } 
      if (
      in_array"Leo"$mitgliederC)){
        echo 
      'ist nicht dabei';
        }
        else
        {
          echo 
      'ist dabei<br />';
         } 
      ... 
      Dann will ich doch lieber eine Schleife Statt das X-Fache

      Zitat von OneMercy Beitrag anzeigen
      Was dein Ziel ist habe auch noch nicht so wirklich verstanden.
      Ok nochmal anders

      Ziel: Alle Namen ausgeben die in Array $mitgliederC sind aber nicht im Array $mitgliederB. Alle Namen die "existieren" sind im Array $mitgliederA
      -
      Tut mir wirklich Leid das meine Fragen noch unterstes Niveau sind.

      Kommentar


      • #4
        Ich verschiebe das jetzt mal wieder zurück, unter der Bedingung, dass du dir unseren Grundlagen-Thread durchliest und versuchst, dein Problem anhand der genannten Quellen selbst zu lösen.

        Mr. Ad verschwindet übrigens irgendwann von selbst. Ihn auf de Ignore-List zu setzen halte ich übrigens nicht fair den Beitreibern dieses Forums gegenüber.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Hallo Manko und anderen Mods,

          wie ich schon schrieb habe ich die Grundlagen mir zu Gemüte geführt aber nicht verstanden.
          Die funktionierende Ideallösung zu mein Problem ist das hier
          PHP-Code:
          foreach($mitgliederC as $name) {
              if(
          in_array($name$mitgliederB)) {
                  
          // aktuelles Element ist in $mitgliederB enthalten
              
          } else {
                  
          // aktuelles Element ist nicht in $mitgliederB enthalten
                  
          echo $name '<br />';
              }

          Sind aber nicht meine Lorbeeren sondern die von Mercy - danke an der Stelle.

          Das Problem ist das man mit seinen eigenen Problemen wie ein Ochs vorm Berg steht und den Wald vor Lauter Bäumen nicht sieht.

          Guckt man sich die Grundlagen an die ich mir her (siehe oben ) genommen habe
          Funktioniert das alles gut mit Variablen kombiniert man das mit Arrays muss erst mal der Funke überspringen.
          das habe ich mit php-quake
          versucht aber auch mit Schattenbaum
          Mit foreach wird jeder Wert des Arrays vorrübergehend einer Variable zugeordnet und dann zB gelistet. Der Name der Variable wird durch den Befehl as angegeben.
          PHP-Code:
            <?php
            
          foreach($blumen as $meine_blume)
              echo 
          $meine_blume,"<br>";
            
          ?>
          Die Liste würde dann so aussehen:
          Rose
          Tulpe
          Nelke
          Sonnenblume
          Auch php-einfach erklärt das an einem Beispiel
          Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: foreach
          PHP-Code:
          <?php
          $mitarbeiter 
          = array("Bob","Peter","Lisa");

          echo 
          "Foreach-Schleife: <br>";
          foreach(
          $mitarbeiter AS $name)
             {
             echo 
          $name."<br>";
             }
          ?>
          Im Schleifenkopf definieren wird, dass die Werte in $name gespeichert werden soll. Unter dieser Variable können wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen.
          Im Bezug muss man aber erstmal darauf kommen, das man eine foreach Schleife macht dann erst die Bedingungen daran knüpft.
          Kombinationsgabe. Ok soweit lächerlich werden die Erfahrenen /Schnellbegreifer unter Euch sagen.
          Gut, drum schrieb ich ja
          Ich möchte von Euch jetzt nicht die 100% Lösung haben, sondern eher eine Erklärung wie man am besten an die Sache ran gehen sollte. Logische Denkweise in Schritten und so. ....Falls ich ganz falsch an die Sache ran gegangen bin sagt mir das doch bitte auch.
          Ich finde das mit dem "lerne Grundlagen" soweit ok, sollte aber nicht die Klatsche für alle sein, denn wäre genauso wen man als 5 Jähriger oder Analphabet mit einem aus den Nachbarland reden möchte und man erkennt das es an der Sprache hapert und sich eine Stelle zur Hilfeleistung(Schule/Mama was auch immer) sucht und dort Ein Zettel bekommt wo folgendes drauf steht:

          Wörterbücher:
          • Langenscheidts "Sprache" - Deutsch | Deutsch - "Sprache"
          • Sprachwörterbuch "X"
          • Nachschlagewerk "Y"

          Tutorials:
          • Französisch für Dummies
          • Spanisch in 31 Tagen
          • Tutorial für Einsteiger in Englisch

          Problem: einem Analphabet bringt das nix genauso wie ein Kind oder wenn wie ich begriffsstutzig bin oder was auch immer.

          Oder noch abstrakteres Beispiel?
          Ich verteile die Bedienungsanleitungen von Taschenrechner X oder Y auf Webseite xy.
          Und ich erwarte dann das es bei jedem "Klick" macht und setze voraus das jeder zumindest die Dichte [Formeln&Masse natürlich inkl.] von Bewehrung & Beton selbständig ausrechnen kann, damit man im Forum "Statik von Bogenbrücken" überhaupt die einfachsten Fragen stellen darf.....

          Aber darüber hinaus, wer sagt mir welche "Grundlage" für Newbies wie mich besten sei, oder aktuell und Stand der Dinge ist und oder überhaupt richtig?

          Ich habe einen langen Weg vor mir und noch viele Schritte zu gehen. Und ich bin froh das es solche Foren wie dieses hier mit all sein freiwilligen Helfern gibt, wo man auch, in euren Augen, die blödesten Fragen stellen kann.
          Andernfalls - ja nehme ich SuMa "X" und sperrt hier die blutigsten Newbies aus.

          Zum Thema "Beitrag verschoben in Beanstandete und zu überarbeitende Beiträge"
          Dieses Vorgehen ist soweit in Ordnung
          Dann guckt man sich folgende Punkte an
          * Ein unzureichender Titel. Siehe dazu: Bitte aussagekräftige Threadtitel verwenden
          * Eine unverständliche Beschreibung oder grob fahrlässige Grammatik
          * Eine fehlende Problembeschreibung
          * unformatierte oder unkonkrete Code-Postings
          * deutlich fehlende Eigeninitiative
          Die Fragen die sich dann einen Neuen stellen können
          War der Titel in Ordnung?
          Problemstellung/Beschreibung/Grammatik ok gewesen?
          war der Code Posting unter aller Sau gewesen?
          Eigeninitiative - was wird erwartet ??? Grundlagen? Die Referenzen und Tuts kennen?
          Wenn ja, wäre der Thread nicht nötig gewesen, andernfalls ist dann das Anliegen in "programmieren für Fortgeschrittene" Kategorie besser aufgehoben.
          In meinen Fall mit diesen Thread habe ich den Titel von
          "das Schleifentheater eines Newbies mit den Arrays"
          in
          Schleifen Problem mit den Arrays - Logikproblem
          geändert und die Arrays mit "" versehen.

          Mein konstruktiver Vorschlag wäre:
          Kennzeichnet wenigstens das Thema mit einen Präfix oder so was nicht stimmt,
          eine oder 4,5 Checkboxen sind doch schnell geklickt.

          Versteht diesen Beitrag nicht als böse oder angreifen oder oder.
          Sondern nur wie es die Leute von der anderen Seite sehen, die noch "Neu" sind.

          Euch allen einen schönen Sonntag noch

          Kommentar

          Lädt...
          X