Portal > Foren > PHP > PHP-Programmierung > Array key eines bestimmten Wertes zurückgeben
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 21.06.2007, 12:17 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.481
Standard Array key eines bestimmten Wertes zurückgeben

Kommt mir so vor, als hätte ich das Problem schon mal gehabt, aber ich kann gerade keinen entsprechenden Thread finden.
Demnach weiß ich gerade auch nicht mehr, ob das, was ich machen ist möglich ist oder ob ich es da schon gelöst habe bzw. es dort gelöst wurde.

Nunja.

---

Problemstellung:

Ich habe ein Array
PHP-Code:
array(2) {
  [
0]=>
  array(
6) {
    [
"picture_id"]=>
    
string(6"11"
  
}
  [
1]=>
  array(
6) {
    [
"picture_id"]=>
    
string(6"12"
  
}
  [
2]=>
  array(
6) {
    [
"picture_id"]=>
    
string(6"13"
  
}

Über einen GET-Request wird ein Bild identifiziert. Nun habe ich z.B. als $pictureID (aus dem Request) den Wert 11.
Jetzt möchte ich einen Link zum "nächsten Bild" anbringen.
Ist das Bild selbst schon das letzte, also existiert kein weiteres Bild mehr, so soll der Link natürlich nicht angezeigt werden.

Heißt, dass zwei Informationen benötige:
  1. Die Information, ob es ein weiteres Element gibt
  2. Die $pictureID des nächsten Arrayelements, falls 1. true liefert, ansonsten die des vorigen (wobei hier natürlich auch auf die Existenz geprüft werden muss).

Schön und gut. Generell ja kein Problem, aber wie komme ich an die Daten?
Es gibt ja irgendwie keine direkte Möglichkeit herauszufinden, welche Position "das Bild" im Array hat, oder?

Ich kann das über eine Schleife und array_values() machen, aber nunja, so ein direkter Weg wäre schon toll.
Es fehlt halt irgendwie so etwas wie getKeyByValue($value);

Falls jemand eine Möglichkeit kennt .. danke.
Grüße, Ben.



Ok, Nachtrag.

Ich habe die einzelnen Keys jetzt einfach mit der eindeutigen pictureID benannt. Das bringt mich auf jeden Fall mal einen Schritt weiter (das mit array_values() war irgendwie eine Sackgasse!).

Irgendwie würde sich hier wohl die Verwendung von next()/prev() anbieten, aber leider klappt das nicht so, wie ich möchte.

Ich habe folgenden Code:
PHP-Code:
$tmp $albumData['images']['12'];

echo 
'<pre>';
var_dump(current($albumData['images']));
echo 
'</pre>'
Warum gibt mir current() jetzt den zu ['11'] passenden Wert zurück?
Habe ich den Zeiger des Arrays jetzt nicht verschoben und auf '12' gesetzt? :-/

Danke!

Geändert von Ben (21.06.2007 um 12:37 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2007, 12:42 Nach oben    #2
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Schön und gut. Generell ja kein Problem, aber wie komme ich an die Daten?
Es gibt ja irgendwie keine direkte Möglichkeit herauszufinden, welche Position "das Bild" im Array hat, oder?

Ich kann das über eine Schleife und array_values() machen, aber nunja, so ein direkter Weg wäre schon toll.
Es fehlt halt irgendwie so etwas wie getKeyByValue($value);

Falls jemand eine Möglichkeit kennt .. danke.
Grüße, Ben.
Ich setze mal voraus, dass du das Array selbst nicht verändern willst (was ich überdenken würde, egal).
Wenn du ausser PictureID keine weiteren Elemente hast:
PHP-Code:
$key array_search(array("picture_id" => "11"), $meinArray);
$hatNaechstes array_key_exists($key 1$meinArray); 
Wenn du jedoch mehr als picture_id drin hast, ist IMHO die performanteste Möglichkeit, mittels foreach schlichtweg dein Array zu durchlaufen. Sobald du den Key findest, merkst du dir das nächste Element (Siehe Array-Funktionen und Bedeutung des internen Array-Zeigers).
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2007, 12:43 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.481
Standard

Habe mehr Informationen drin.

Hatte oben noch etwas nachgetragen.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2007, 12:51 Nach oben    #4
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Habe ich den Zeiger des Arrays jetzt nicht verschoben und auf '12' gesetzt? :-/
Leider nein. In der Regel manipulieren nur foreach und einige der Array-Funktionen den internen Array-Zeiger. Wobei ich deine erste Zeile
PHP-Code:
$tmp $albumData['images']['12'
nicht verstehe, das passt doch nciht zu deinem ursprünglich definierten Array ganz am Anfang deiner Posts
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html

Geändert von Ben (21.06.2007 um 12:56 Uhr).
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2007, 12:55 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.481
Standard

Jau, ab hier noch was geändert.
Zitat:
Ich habe die einzelnen Keys jetzt einfach mit der eindeutigen pictureID benannt.
Werd noch mal bisschen spielen.
Danke für die Aufklärung.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 07:39 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.481
Standard

Bin nun den Weg über das Array gegangen. Ist nun so realisiert, dass das Array nicht wirklich viele Einträge hat, so dass das auch fix durchlaufen werden sollte, vor allem weil es ja nur bis zum gesuchten Wert läuft.

Also quasi Lösung durch die Hintertür.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 19:15 Nach oben    #7
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 241
Standard

Du könntest das Array mittelst usort nach der ID sortieren und dann eine Binäre Suche anwenden um die Position herauszufinden.

Oder habe ich das jetzt falsch verstanden?

EDIT: Vergiss es, mein Vorschlag wird viel langsamer sein, als deine Lösung.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL



Geändert von Artemis (22.06.2007 um 19:17 Uhr).
Artemis ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 19:19 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.481
Standard

Zitat:
Zitat von Artemis Beitrag anzeigen
Vergiss es, mein Vorschlag wird viel langsamer sein, als deine Lösung.
Ich habe gerade auch gedacht ....

Also die Problemstellug hat sich insofern erledigt, da im Array nun nur maximal 16 Einträge sein werden. Demnach ist die Schleife sicherlich fix.

Aber die binäre Suche kannte ich nicht. Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 20:14 Nach oben    #9
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Die binäre Suche ist eigentlich ganz einfach und fix für größere (vorsortierte) Datenmengen. Man nehme ein beliebiges Element und schaue ob das gesuchte kleiner oder größer ist. Dann nimmt man entsprechend die übrigbleibenden und guckt wierder ein Element raus und schaut ob es kleiner oder größer ist. Wenn man nun immer in der Mitte sucht, bleibt bei jedem Suchvorgang die Hälfte übrig. Man hat also bei 2 hoch x Elementen maximal x Vergleichsvorgänge. oder so ähnlich (müsste überlegen, Mathe ist etwas her)

Lohnt sich erst bei vorsortierten Datenmengen, da das Sortieren selbst meist aufwendiger ist, als das Array einfach so einmal komplett zu durchsuchen.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 15:16 Nach oben    #10
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 523
Standard

bei der binären suche wird die zu durchsuchende, sortierte menge immer halbiert (durch den vergleich größer/kleiner). dadurch braucht man nur log n vergleichsvorgänge.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array - hinzufügen doppelter key DasMööp PHP-Programmierung 9 28.04.2008 19:25
[C/PHP -> mcrypt] Zu kurzer Key WarrenFaith Sonstige Programmiersprachen 19 03.04.2007 11:03
Suche Hilfe: Angebot und Nachfrage berechnen ljungi Plauderecke 6 17.12.2006 22:10
Schlüssel in verschachteltem Array suchen und Wert zurückgeben Ben PHP-Programmierung 8 19.10.2006 18:54
Array in Bezug auf ein anderes sortieren... code5 PHP-Programmierung 2 15.05.2006 15:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:22 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44