Maria Martin: Daten in einem ARRAY suchen

Hallo liebes Forum,

da ich ein PHP Anfänger bin, suche ich folgende Lösung.

ich habe ein ARRAY

$zeile=array(1=>0.005,
2=>0.01,
3=>0.02,
4=>0.03,
5=>0.04,
6=>0.05,
7=>0.07,
8=>0.10);

Wenn ich einen Key eines Bestimmten Wertes suche benutze ich
array_search(0.01,$zeile);
Das funktionier prima.

Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
da ja der Wert dazwischen liegt.

Wie kann ich dies einfach realisieren.
Bitte um eine einfach Erklärung für einen Anfänger.

Danke im Voraus für die Hilfe.

Gruß Maria

  1. Hello,

    da ich ein PHP Anfänger bin, suche ich folgende Lösung.

    Das wird sich hier sehr schnell ändern, wenn Du Deine Fragen weiter so gut formulierst *Hut ab*

    ich habe ein ARRAY

    $zeile=array(1=>0.005,
    2=>0.01,
    3=>0.02,
    4=>0.03,
    5=>0.04,
    6=>0.05,
    7=>0.07,
    8=>0.10);

    Wenn ich einen Key eines Bestimmten Wertes suche benutze ich
    array_search(0.01,$zeile);
    Das funktionier prima.

    Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
    da ja der Wert dazwischen liegt.

    Du suchst also eine "near()"-Suche. Dazu muss das Array sortiert werden. Schau dir mal die Sortierfunktionen für Arrays an: natsort(), asort(), usw...
    http://de.php.net/manual/de/function.natsort.php
    http://de.php.net/manual/de/function.asort.php
    und vergiss die Flags nicht (SORT_NUMERIC)

    Fragen, ob der Wert im Array ist
    Wenn nein, Array sortieren

    Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.

    mit prev() kannst Du dann den Schlüssel des vorigen Wertes ermitteln, da die Schlüssel und Werte ja je nach Sortierverfahren gebunden bleiben, oder aber neu kombiniert werden!

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.

      Genau das kann ich nicht. Kannst du mir das bitte zeigen, wie man das macht.

      1. Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.

        Genau das kann ich nicht. Kannst du mir das bitte zeigen, wie man das macht.

        http://de.php.net/manual/de/control-structures.foreach.php

        Wenn dir das garnicht weiterhilft...schreib nochmal

        1. http://de.php.net/manual/de/control-structures.foreach.php

          Wenn dir das garnicht weiterhilft...schreib nochmal

          Die Seite bin ich auch gerade, Danke. Finde aber keine Lösung zu meinem Problem

          1. Die Seite bin ich auch gerade, Danke. Finde aber keine Lösung zu meinem Problem

            Na mal schaun:

            foreach($arrayInDemDuSuchst as $wertDesElementes)
             {
             if ($wertNachDemDuSuchst > $wertDesElementes)
              {
              $vorherigerWert = prev($arrayInDemDuSuchst);
              $aktuellerWert = $wertDesElementes;
              }
             else
              {
              echo "...";
              }
             }
            Und dann suchst du in dem array mit array search nach den beiden Werten $vorherigerWert und $aktuellerWert und erhältst so die Zeile zurück.

            (vorher muss natürlich sortiert werden, so wie's Tom schon angedeutet hat)

            Grüße
            Sinepp

            1. $vorherigerWert bekomme ich keinen Wert.
              Was mache ich noch Falsch???

              Hier mein Code:

              $spalte1=array(1=>0.15,
               2=>0.25,
               3=>0.50,
               4=>0.75,
               5=>1.00,
               6=>1.50,
               7=>2.00);

              foreach($spalte1 as $wertDesElementes)
               {
               if(0.4 > $wertDesElementes)
                {
                $vorherigerWert=prev($spalte1);
                $aktuellerWert=$wertDesElementes;
                }
               else
                {
                // echo "...";
                }
               }

              echo "vorherigerWert: ".$vorherigerWert."<br>";
              echo "aktuellerWert: ".$aktuellerWert."<br>";

              echo "key1: ".array_search($vorherigerWert,$spalte1)."<br>";
              echo "key2: ".array_search($aktuellerWert,$spalte1)."<br>";

              Ergebnis:

              vorherigerWert:
              aktuellerWert: 0.25
              key1:
              key2: 2

              1. Hello,

                $vorherigerWert bekomme ich keinen Wert.
                Was mache ich noch Falsch???

                Hier mein Code:

                $_spalte1=array

                (
                    1=>0.15,

                2=>0.25,
                  3=>0.50,
                  4=>0.75,
                  5=>1.00,
                  6=>1.50,
                  7=>2.00

                );

                $suchwert = 0.40;

                foreach($_spalte1 as $key => $val)
                  {
                    if($suchwert > $val)
                    {
                      break;
                    }
                  }

                if ($suchwert > $val)       ## das ist notwendig, da $key auf dem letzten Element
                 {                           ## des Arrays nicht weitergesetzt wird

                echo "Wert ist größer als alle Werte im Array";
                 }
                 else
                 {
                   echo "Wert ist kleiner als $val in Element $key";

                }

                echo "vorherigerWert: ".$vorherigerWert."<br>";
                echo "aktuellerWert: ".$aktuellerWert."<br>";

                echo "key1: ".array_search($vorherigerWert,$spalte1)."<br>";
                echo "key2: ".array_search($aktuellerWert,$spalte1)."<br>";

                Ergebnis:

                vorherigerWert:
                aktuellerWert: 0.25
                key1:
                key2: 2

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Danke, jetzt müßte ich das Problem lösen können.
                  Schönen Tag noch......

                  Die Reise geht weiter:
                  www.arved-fuchs.de/nwp/logbuch.htm

                  1. Hello,

                    Danke, jetzt müßte ich das Problem lösen können.

                    Sorry, wenn ich vorhin etwas kurz angebunden war. Aber ich musste meinem Schäffe eben noch ein paar wichtige Informationen rauslocken und der kam vorhin gerade rein. Wenn er schon die Aufträge ranschafft, dann muss schließlich auch die Produktion stimmen. ;-)

                    Also melde Dich ruhig nochmal, wenn es noch kneift. Da sind noch einige Fallen drin versteckt. Die Aufgabe sieht einfacher aus, als sie ist.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                2. Hallo ihr da draußen,

                  $suchwert = 0.40;

                  foreach($_spalte1 as $key => $val)
                    {
                      if($suchwert > $val)
                      {
                        break;
                      }
                    }

                  Hmm... Bricht das nicht gleich beim ersten ab, da 0.40 größer als 0.15 ist? Meines Erachtens müsste es ein < statt des > sein.

                  Deswegen hat wohl auch Marias Lösung nicht wie gewollt funktioniert.

                  Grüße von hier drinnen, aus Biberach an der Riss,
                  Candid Dauth (Dogfish)

                  --
                  »Bismarck biss Mark, bis Mark Bismarck biss!«
                  http://cdauth.net.tc/
                  ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
                  1. Hello,

                    Hallo ihr da draußen,

                    $suchwert = 0.40;

                    foreach($_spalte1 as $key => $val)
                      {
                        if($suchwert > $val)
                        {
                          break;
                        }
                      }

                    Hmm... Bricht das nicht gleich beim ersten ab, da 0.40 größer als 0.15 ist? Meines Erachtens müsste es ein < statt des > sein.

                    Das kommt doch darauf an, wie das array sortiert ist.
                    Wenn es von groß zu klein sortiert ist macht man es eben so herum, sonst anders herum. Da hast Du dann natürlich recht. Das Maria aber bestimmt schon gemerkt.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
  2. Hallo Maria,

    Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
    da ja der Wert dazwischen liegt.

    kommt darauf an, ob das Array tatsächlich so wie von dir gezeichnet aussieht. Falls ja, findet er ja bei 0.06 nichts. Dann könntest du den Fall abfangen und nachschauen, ob 0.06+0.0.1 bzw. 0.06-0.01 existiert (bzw. beide). Dann erhältst du den Key 5 und 6.

    Beantwortet das deine Frage?

    Grüße
    Sinepp

    1. Beantwortet das deine Frage?

      Nein, leider nicht.

      Das ARRAY sieht so aus, nur größer (mehr Werte)