Tom: Array Zeiger positionieren

Hello,

nun habe ich ganz prophanes Problem:

Wie kann ich den intrnen Zeiger in einem Array gezielt auf einen Key positionieren?

Beipiel:

$_data[2] = 'zwei';
$_data[5] = 'fünf';
$_data[6] = 'sechs';
$_data[7] = 'sieben';
$_data[9] = 'neun';
$_data[22] = 'zweiundzwanzig';

Ich möchte auf den Index [5] positionieren und dann mit next() drei Elemente holen, also hier [5], [6], [7]

Anschließend steht der interne Zeiger auf [9]
Das merke ich mir und beim nächsten Sriptaufruf möchte ich dann von [9] aus mit next() weitermachen...

Ich möchte das Array nicht umkopieren müssen. Die Keys müssen erhalten bleiben.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. Hallo!

    Wie kann ich den intrnen Zeiger in einem Array gezielt auf einen Key positionieren?

    Also mit vordefinierten PHP-Funktionen ist da wohl nichts zu machen. Kann aber auch sein, daß ich es übersehen habe oder das man mit Verschachtlungen was machen kann.

    $_data[2] = 'zwei';
    $_data[5] = 'fünf';
    $_data[6] = 'sechs';
    $_data[7] = 'sieben';
    $_data[9] = 'neun';
    $_data[22] = 'zweiundzwanzig';

    Ich möchte auf den Index [5] positionieren und dann mit next() drei Elemente holen, also hier [5], [6], [7]

    Anschließend steht der interne Zeiger auf [9]
    Das merke ich mir und beim nächsten Sriptaufruf möchte ich dann von [9] aus mit next() weitermachen...

    Nicht elegant, funktioniert aber:

    $_data[2] = 'zwei';
    $_data[5] = 'fünf';
    $_data[6] = 'sechs';
    $_data[7] = 'sieben';
    $_data[9] = 'neun';
    $_data[22] = 'zweiundzwanzig';

    $erster_key = reset(array_keys($_data));

    $zaehler = 1;
    $key_gefunden = false;
    $key_start = 5; // woher auch immer
    $anzahl = 3; //

    while(list($key, $value) = each($_data))
     {
                if(($key == $key_start OR $key_gefunden) AND $zaehler <= $anzahl)
       {
        $key_gefunden = true;
        echo $key . "<br>";
       }
      if($zaehler > $anzahl)
       {
        echo "<b>nächster KEY: " . $key . "</b><br>";
        break;
       }
      if($key_gefunden)
       {
        $zaehler++;
       }
     }

    Sorry, Ich habe jetzt keine Lust zum auskommentieren.

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Hello,

      Also mit vordefinierten PHP-Funktionen ist da wohl nichts zu machen. Kann aber auch sein, daß ich es übersehen habe oder das man mit Verschachtlungen was machen kann.

      Das habe ich befürchtet. Hier fehlt auf jeden Fall eine Funktion, die den Zeiger auf einen Key vorrückt, wenn er da ist und sonst false zurückgibt und eine andere, die dies nach vorheriger Sortierung der Keys tut und als Option das Verhalten steuert für den Fall des Nichtfindens:

      - stay      beim aktuellen stehenbleiben
       - near      beim nächstgrößeren stehenbleiben
       - begin     an den Anfang zurücksetzen
       - end       auf den letzten Schlüssel setzen
       - false     hinter das Array setzen und false zurückgeben

      Wenn man eine solche Funktion diskret erstellt, drürfte die ziemlich teuer werden. Laut Manual müsste man auch foreach() benutzen können. Der Zeiger wird bewegt (steht da). Ich probier das mal aus.

      array_seek($_array, $key, $option='stay')
      {
        ...

      }

      Liebe Grüße aus http://www.braunschweig.de

      Tom

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

        Das habe ich befürchtet. Hier fehlt auf jeden Fall eine Funktion,
        die den Zeiger auf einen Key vorrückt, wenn er da ist und sonst
        false zurückgibt und eine andere, die dies nach vorheriger
        Sortierung der Keys tut und als Option das Verhalten steuert für
        den Fall des Nichtfindens:

        • stay      beim aktuellen stehenbleiben
        • near      beim nächstgrößeren stehenbleiben
        • begin     an den Anfang zurücksetzen
        • end       auf den letzten Schlüssel setzen
        • false     hinter das Array setzen und false zurückgeben

        http://de3.php.net/manual/de/function.current.php
          http://de3.php.net/manual/de/function.next.php
          http://de3.php.net/manual/de/function.prev.php

        http://de3.php.net/manual/de/function.reset.php
          http://de3.php.net/manual/de/function.end.php

        Grüße,
         CK

        --
        Death is God's way of telling you not to be such a wise guy.
        http://wwwtech.de/
        1. Hello Christian,

          http://de3.php.net/manual/de/function.current.php
            http://de3.php.net/manual/de/function.next.php
            http://de3.php.net/manual/de/function.prev.php

          http://de3.php.net/manual/de/function.reset.php
            http://de3.php.net/manual/de/function.end.php

          Danke für die Hinweise.

          Diese Funktionen habe ich natürlich schon "verinnerlicht" und benutze sie auch. Das Problem ist aber ein anderes. Und meine Überlegung von oben war auch nicht vollständig (können da Überlegeungen überhaupt sein?).

          Das Ziel ist es, eine einheitliche Schnittstelle zu schaffen, die es ermöglicht, entweder mit einer DB zu arbeiten oder mit Flatfiles. Das ist immer dann interessant, wenn die Datenmenge "im Rahmen" bleibt und keine großartigen ERMs notwendig sind, also keine umfangreichen Relationen zwischen Tabellen (Files) entstehen.

          Die Aufgabenstellung ist aus mehreren Anregungen entstanden:

          • In Arbeit bedfindliches Tut "speichern in Flatfiles"
          • die ewigen Empfehlungen "nimm doch gleich 'ne Datenbank"
          • konkurrierende Zugriffe, Lockingstrategien, etc.

          Und natürlich nicht zuletzt auch die Frage der Optimierung, die Du ja an anderer Stelle schon mit "Halbwissen" bemängelt hast. Ich würde mal annehmen, dass ich bisher von den Optimierungsmöglichkeiten maximal 10% selbst ausprobiert habe, also ist "Halbwissen" ja noch ein Kompliment *g* Danke...

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Das Ziel ist es, eine einheitliche Schnittstelle zu schaffen, die es ermöglicht, entweder mit einer DB zu arbeiten oder mit Flatfiles. Das ist immer dann interessant, wenn die Datenmenge "im Rahmen" bleibt und keine großartigen ERMs notwendig sind, also keine umfangreichen Relationen zwischen Tabellen (Files) entstehen.

            http://www.php.net/manual/en/ref.sqlite.php

            1. Hello,

              Das Ziel ist es, eine einheitliche Schnittstelle zu schaffen, die es ermöglicht, entweder mit einer DB zu arbeiten oder mit Flatfiles. Das ist immer dann interessant, wenn die Datenmenge "im Rahmen" bleibt und keine großartigen ERMs notwendig sind, also keine umfangreichen Relationen zwischen Tabellen (Files) entstehen.

              http://www.php.net/manual/en/ref.sqlite.php

              Danke für den Tipp. Ist natürlich erst ab PHP 5 verfügbar, wie es aussieht. Aber man kann sich ja Anregungen holen. Das ist mir nämlich schon fast zuviel des Guten. Ich möchte nur eine sehr viel einfachere Umsetzung realisieren, die man dann durch Einbinden von einfachen Tools in seine Seite aktivieren kann, so eine Art dBase für Arme.

              Es sollte aber eben möglich bleiben, die Flatfiles später durch einige DB-Tabellen auszutauschen, ohne dass alle Scripte großartig geändert werden müssen.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. http://www.php.net/manual/en/ref.sqlite.php

                Danke für den Tipp. Ist natürlich erst ab PHP 5 verfügbar, wie es aussieht.

                Nein.

                1. Hello,

                  http://www.php.net/manual/en/ref.sqlite.php

                  Danke für den Tipp. Ist natürlich erst ab PHP 5 verfügbar, wie es aussieht.

                  Nein.

                  Heißt das, dass die Doku von PHP lügt? Ich habe keine einzige Funktion zu sqlite_  gefunden, bei der nicht (PHP 5) drinsteht. Was muss man denn bei PHP 4 machen, damit es funktioniert?

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. http://www.php.net/manual/en/ref.sqlite.php

                    Danke für den Tipp. Ist natürlich erst ab PHP 5 verfügbar, wie
                    es aussieht.

                    Nein.

                    Heißt das, dass die Doku von PHP lügt?

                    Das heißt, du hast nicht genau gelesen:

                    |Installation
                    |
                    |Read the INSTALL file, which comes with the package. Or just use
                    |the PEAR installer with "pear install sqlite". SQLite itself is
                    |already included, You do not need to install any additional
                    |software.
                    |
                    |Windows users may download the DLL version of the SQLite extension
                    |here: (php_sqlite.dll).
                    |
                    |In PHP 5, the SQLite extension and the engine itself are bundled and
                    |compilled by default.

                    Ich habe keine einzige Funktion zu sqlite_  gefunden, bei der nicht
                    (PHP 5) drinsteht.

                    Im Manual steht deshalb immer '(PHP5)', weil es nicht im Bundle für
                    PHP4 enthalten ist, sondern nur als PEAR-Extension verfügbar ist.

                    Was muss man denn bei PHP 4 machen, damit es funktioniert?

                    Vorzugsweise das Manual lesen und nicht nur überfliegen.

                    1. Hello,

                      Was muss man denn bei PHP 4 machen, damit es funktioniert?

                      Vorzugsweise das Manual lesen und nicht nur überfliegen.

                      Ach ja, da war doch mal was...
                      Sind da auch Bilder drin? *g*

                      Liebe Grüße aus http://www.braunschweig.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau