Array Zeiger positionieren
Tom
- php
0 André Laugks0 Tom0 Christian Kruse0 Tom
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
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
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
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
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.phphttp://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:
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
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.
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.
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
Danke für den Tipp. Ist natürlich erst ab PHP 5 verfügbar, wie es aussieht.
Nein.
Hello,
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
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.
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