Array überprüfen... - Aber wie?

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

  • Array überprüfen... - Aber wie?

    Hi,
    der Titel ist wenig Aussagekräftig aber mir is leider nix besseres eingefallen.
    Also...

    Ich habe ein Array $arr.
    Dem habe ich in einer Schleife true oder false zugeordnet:

    Code:
    $arr=array($i => 'true');
    Dabei ist $i eine Laufvariable.

    Das eigendliche Problem besteht darin, dass $arr[$i] entweder true oder false als wert hat. Wenn jetzt aber beim ersten durchlauf der schleife $arr[$i] false ist und beim 2. durchlauf true dann wird eine erstmal unwichtige transaktion durchgeführt.

    Was ich will ist aber dass wenn eine der beiden $arr[$i]'s false ergibt abgebrochen wird.

    ich hoffe ihr habt verstanden was ich meine... ist ein recht merkwürdiges problem darum bitte ich um eure Hilfe.

    Mein Code zum Vergleichen sieht derzeit so aus:
    Code:
    if($arr[$i] == 'false')
    {
        break 1;
    }
    else
    {
         #machwas
    }
    ich würde mich wahnsinnig freuen wenn ihr nen Tipp für mcih hättet

  • #2
    naja,

    auf die gefahr hin, daß ich dich falsch verstand:

    PHP-Code:
    if ($array[$i]) {
      
    do_my_dirty_work();

    oder, nee ... wenn eine der beide fals, abbrechen

    PHP-Code:
    if (!$array[$i1] || !$array[$i2]) {break;} 
    sagt doch mal, was an deinem code nicht funzt?
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Versuche es mal so:
      PHP-Code:
      if($arr[$i] == false// Lass mal hier die ' weg.
      {
          break;
      }
      else
      {
           
      // machwas

      mfg
      Günni


      Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
      Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
      Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
      City-Tiger - Online durch die Straßen tigern...

      Kommentar


      • #4
        em wie kommst du auf $i1 und $i2?

        ich zeig mal den code im einzelnen....


        PHP-Code:
        $qf=mysql_query("SELECT wep,id,forschungen FROM game_waffen");

        while(
        $f=mysql_fetch_assoc($qf))
        {    
            
        #echo "waffe: $f[wep]<br>";
            
        $forschung=explode(";"$f[forschungen]);
            
        $i=0;
            
            
            foreach(
        $forschung AS $array)
            {
                
        #echo"&nbsp;&nbsp;foreach $i<br>";
                
        $expgenau=explode(":"$forschung[$i]);
                
        #echo "&nbsp;&nbsp;for: $forschung[$i]<br>";

                
        $qfo=mysql_query("SELECT * FROM game_explore 
        WHERE land_id='
        $daten_land[land_id]' AND f_id=TRIM('$expgenau[0]')
         AND anz >=TRIM('
        $expgenau[1]')")or die(mysql_error());
                if(
        mysql_num_rows($qfo) > 0)
                {
                    
        $arr=array($i => 'true');
                }
                else
                {
                    
        $arr=array($i => 'false');
                }
                
        #echo "&nbsp;&nbsp;array: $arr[$i]<br>";
                
                
                
        foreach($arr AS $blubb)
                {
                    if(
        $arr[$i] == 'false')
                    {
                        break 
        1;
                    }
                    else
                    {
                        
        $qp=mysql_query("SELECT COUNT
        (*) AS zahl FROM game_waffenprod WHERE w_id='
        $f[id]' AND land_id='$daten_land[land_id]'");
                        
        $b=mysql_fetch_assoc($qp);
                        if(
        $b[zahl] == 0)
                        {
                            
        mysql_query("INSERT INTO game_waffenprod (w_id, land_id) VALUES ('$f[id]', '$daten_land
        [land_id]')"
        )or die(mysql_error());
                        }
                    }
                }
                
        $i++;
            }
            

        Es wird also jede Waffe aus ner statischen Tabelle durchgegangen. (WHILE)
        Danach hol ich mir die forschungen aus nem textfeld in der tabnelle (format 1:5 [x=forschungs id, y= forschungsstufe])
        das wird dann mit explode zerlegt und dann mit foreach durchgegangen.

        Nun will ich im endeffekt wissen, bei welcher waffe EINE oder mehere von beiden $arr[$i]'s false ergibt.

        ich hoffe diesmal war ich verständlicher ^^

        EDIT:
        @Günni: die ' hab ich nur gemacht weils in den Satz so gut reinpasste. damint meinte ich nur die mehrzahl der var. $arr[$i]
        Aber schau dir mal dieses Posting an

        EDIT2:
        Wenn cih die ' weglasse werden mir trotzdem alle datensätze angezeigt beidenen $arr[$i] nur _EINMAL_ true ist. ich brauch aber alle DS wo es nioemals false ist bzw immer true ist
        Zuletzt geändert von Skyrunner; 21.12.2003, 10:40.

        Kommentar


        • #5
          häh?

          du verwendest ein assoziatives array, welches einen incrementellen index hat? sinn? hab ich was übersehen?

          du verwendest wahrheitswerte als string?

          das i1 und i2 kam nur daher, daß du von genau 2 sachen sprachst ... egal ... ich schaus mir nochmal an.
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            was ist eigentlich das ziel dieser ganzen aktion ... ausser ressourcen zu verbrennen
            Kissolino.com

            Kommentar


            • #7
              ich dachte das Problem könne man nur über ein Array lösen...
              Ich habe ehrlich gesagt keine ahnung wie man das anders als übner ein Array lösen könnte.

              Der Sinn des ganzen ist der dass nur die datensätze geschrieben werden bei denen $arr[$i] je nach anzahl der benötigten forschungen für diese waffe true ist. schonmal für eure bemühungen mir weiterzuhelfen

              Kommentar


              • #8
                ich meinte nicht das ziel, was du mit true oder false verfolgst, sondern,
                was das (tun) ganze soll.

                wenn ich mich recht entsinne, wolltest du im sql-forum mal wissen, wie
                man einträge filtert, die NICHT vorhanden sind oder so?
                Kissolino.com

                Kommentar


                • #9
                  Jo das stimmt.
                  Leider führte der Thread dort zu keinem Erfolg.

                  Deswegen habe ich mir etwas anderes ausgedacht.
                  Das Script an sich ist ja ok und sollte auch funktionieren. Es funktioniert ja auch.

                  Also werde ich das komplett erläutern jetz:

                  In der 1. while werden ALLE Waffen aus einer Tabelle geholt.
                  In der Spalte Forschungen steht dann sowas: 12:3 Das Bedeutet, dass Forschung Nummer 12 auf Stude 3 Ausgebaut sein muss damit man diese Waffe bauen kann. Und das ist auchncoh verkettet: 12:3;1:4;3:2 usw.
                  Mit den explodes hol ich das in Arrays dioe ich dann mit foreach durchlaufe.
                  Die erste ist die hier: foreach($forschung AS $array) .
                  In der stehen die einzelnen Forschungen (12:3 2:4 4:8) usw.
                  12:3 wird dann in 12 und 3 zerlegt. Dann schau ich in die Tabelle wo die Forschungen drin stehen die der user schon hat.
                  Wenn eine entsprechende Forschung gefunden wurde die dem user gehört dann ist $arr[$i] true.
                  Das problem hierbei ist dass es mehere Forschungen gibt (12:3;15:4;2:1 usw) Wenn nun aber die erste forschung nciht vorhanden ist (also false ist) und dann die 2. forschung durchlaufen wird die dann true ist dann ist diese Waffe zum bauen freigegeben, was ja nciht sein soll.

                  Darum meine Frage wie man sicherstellen kann dass beide forschungen(können auch 4 oder 5 sein, ist von der waffe abhängig) true seiun müssen.

                  Ich hoffe man konnte das jetzt irgendiwe ein bisschen besser verstehen

                  Kommentar


                  • #10
                    da hast du dir was nettes ausgedacht

                    wenn man davon ausgeht, dass du eine hierarchie bzw abhängigkeit von
                    wertepaaren hast, wäre es imho sinniger,
                    - pflichtpaare in ein array zu holen/setzen
                    -- eventuell über stufen (array im array)
                    ^^ das könnte auch fest definiert sein, weil vorgabewerte

                    - user_hat_paare in ein weiteres array (1 sql-abfrage)
                    - mit array-funktionen die vergleiche in einer schleife abarbeiten
                    -- => in_array(), array_diff(), array_intersect()
                    ---- in_array() liefert zb schon true oder false
                    -- eventuell musst du das ganze rekursiv in einer funktion machen, um tiefere levels/abhängigkeiten zu prüfen

                    ist mal ein spontaner ansatz.
                    Kissolino.com

                    Kommentar


                    • #11
                      Ich wollte eigendlich nciht das ganze Script umändern. Ich wollte damit so schnell wie möglich fertig werden, da ich das morgen unbedingt brauche und da ein paartausend leute dranhängen...

                      Meine Überlegung war ein mehrdimensionales array zu verwenden doch wie benutz ich sowas?

                      Kommentar


                      • #12
                        Original geschrieben von Skyrunner
                        Ich wollte eigendlich nciht das ganze Script umändern. Ich wollte damit
                        so schnell wie möglich fertig werden, da ich das morgen unbedingt brauche
                        und da ein paartausend leute dranhängen...
                        ob dich der code glücklich macht, wenn ein "paar tausend" gleichzeitig
                        zugreifen? da wird die db aber richtig spass haben ... aber du hast ja noch
                        min. 11 std

                        Meine Überlegung war ein mehrdimensionales array zu
                        verwenden doch wie benutz ich sowas?
                        wie ein "normales"
                        array. man muss nur den überblick haben.

                        vielleicht tastest du dich erstmal mit ein paar beispieldaten an die sache
                        ran, bevor du es endgültig implementierst.
                        mal als einfaches beispiel:
                        PHP-Code:
                        <pre>
                        <?php
                        $muss 
                        = array();
                        $muss[] = "12:3";
                        $muss['12:3'][] = "17:4";
                        $muss['12:3'][] = "18:3";
                        $muss['12:3'][] = "1:7";
                        $muss[] = "15:4";
                        $muss['15:4'][] = "9:1";
                        $muss['15:4'][] = "5:5";
                        $muss['15:4'][] = "1:7";
                        print_r($muss);
                        $hat = array("12:3","17:4");

                        if(
                        in_array($hat[0],$muss))
                        {
                          echo 
                        "bingo1";
                          if(
                        in_array($hat[1],$muss[$hat[0]]))
                          {
                            echo 
                        "bingo2";
                          }
                        }
                        ?>
                        Kissolino.com

                        Kommentar


                        • #13
                          naja,

                          ein mehrdimensionales array benutzt du, man sollte es nicht glauben, wie ein eindimensionales, nur mußt du halt für die weiteren dimensionen auch 'koordinaten' angeben.

                          print_r ist in solchen fällen hilfreich, für mich zumindest.

                          ich persönlich würde das ganze script, sogar den ganzen background neu entwicklen. ich würde halt auch nicht mehr als einen wert in eine tabellenzelle packen ...

                          das, was du vorhast, dürfte nicht _so_ kompliziert sein, ....

                          wünsche dir viel erfolg.
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar

                          Lädt...
                          X