peter mueller: array

hallo

ich habe folgendes array definiert:

a[0]=780
a[1]=810
a[2]=840
a[3]=870

nun möchte ich herausfinden, zwischen welchen beiden array die zahl 820 sich befindet. gibt es hierzu eine funktion?

oder gibt es eine andere möglichkeit dies zu erreichen?

besten dank
peter

  1. Hi Peter,

    ist denn das Array schon sortier?

    Können "Sonderfälle" auftreten etwa:
    1 => 120
    2 => 120
    3 => 900

    oder

    1 => 120
    2 => 820
    3 => 820

    oder ähnliches?

    Wie möchtest Du Sonderfälle behandeln

    VG
    annA

    1. nein, wie gesagt gibt es keine sonderfälle. das array ist fest gegeben.

      a[0]=780
      a[1]=810
      a[2]=840
      a[3]=870

      bei der zahl 820 sollte als ergebnis die zahl 1 herauskommen.
      bei der zahl 869 die zahl 2 usw.

  2. Hi,

    nun möchte ich herausfinden, zwischen welchen beiden array die zahl 820 sich befindet. gibt es hierzu eine funktion?

    das bezweifele ich. Das ist eine _sehr_ besondere Anforderung.

    oder gibt es eine andere möglichkeit dies zu erreichen?

    Schritt 1: Du musst _garantieren_, dass das Array sortiert ist, und die Sortierrichtung kennen.
    Schritt 2: Gehe das Array so lange durch, bis die Bedingung "aktuelles Element kleiner, (in Sortierrichtung) nachfolgendes Element größer" erfüllt ist.

    Beachte hierbei die Sonderfälle, dass der Wert identisch mit einem vorhandenen sein kann, und dass er sich außerhalb des bisherigen Wertebereiches befinden kann.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Beachte hierbei die Sonderfälle, dass der Wert identisch mit einem vorhandenen sein kann, und dass er sich außerhalb des bisherigen Wertebereiches befinden kann.

      ah ok, ich dachte es gäbe da ev. eine funktion, die das ganze vereinfacht hätte.

      besten dank
      gruss
      peter

      1. hi,

        ah ok, ich dachte es gäbe da ev. eine funktion, die das ganze vereinfacht hätte.

        na ja, folgendes wäre vielleicht auch noch denkbar:

        • die 820 mit array_push() dem array hinzufügen.
        • per sort() das erweiterte array wieder richtig sortieren
        • per array_flip() schlüssel und werte vertauschen
        • per array[820] zugreifen, um dort dann den wert der "position" auszulesen

        ist aber nur theoretisch überlegt, ob's in der praxis so funktioniert - k.A.

        ausserdem hättest du dann auch dein original-array nicht mehr, müsstest also mit einer kopie arbeiten, wenn du es nachher noch brauchst, etc.

        gruss,
        wahsaga

        1. ist aber nur theoretisch überlegt, ob's in der praxis so funktioniert - k.A.

          gute idee, ich werde es ausprobieren.

          besten dank
          peter

  3. hi,

    a[0]=780
    a[1]=810
    a[2]=840
    a[3]=870

    nun möchte ich herausfinden, zwischen welchen beiden array die zahl 820 sich befindet.

    • wenn $zahl kleiner ist als das erste array-element, dann befindet sie sich "vor" diesem.
    • wenn nicht, dann durchlaufe das array in einer for-schleife, so lange, bis das aktuelle array-element grösser als $zahl ist. $zahl befindet sich dann zwischen den array-elementen mit den indizes (aktueller schleifenzähler minus 1) und (aktueller schleifenzähler).
    • wenn du am ende der schleife angelangt bist, und immer noch kein grösseres array-element gefunden wurde, dann befindet sich $zahl hinter dem letzten element.

    so in etwa ...

    gruss,
    wahsaga