PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen (http://www.selfphp.de/forum/showthread.php?t=19169)

PHoenix_KM 17.04.2008 11:44:00

Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen
 
Hallo,

ich habe ein Problem mit der Handhabung eines von mir generierten Arrays, welches ich am Ende meiner Frage in Ausschnitten gepostet habe. dieses Array stammt aus einem CMS welches ich gerade dabei bin zu programmieren und stellt die Navigation der Seite da. Die Navigation soll die Möglichkeit bieten beliebig viele Untermenüs zu haben welche nur angezeigt werden wenn die jeweilige Elternseite der aktuellen Seite entspricht. leider habe ich keinen Weg gefunden doppelte Einträge in der Bildung des Arrays zu verhindern, weshalb ich nun am ende diese gerne aus dem array aussortieren möchte. Ich habe es mit array_unique versucht doch leider mußte ich feststellen das dieser Befehl nur bei eindimensionalen Arrays den gewünschten effekt bringt. Nun suche ich nach einem Befehl oder einer Funktion um das untenstehende Array nach 'seitennr' zu durchsuchen und den gesamten Datensatz welcher doppelt verhanden ist auszusortieren, und überflüssige Einträge zu löschen. zur verdeutlichung habe ich das von mir gewünschte array am Ende noch einmal dagestellt.


Vielen Dank schon einmal für Eure Hilfe.


print_r($nav_array);

momentane ist Darstellung:
Array
(
[0] => Array
(
[seitennr] => 1
[unterseite_von] => 0
[ebene] => 0
[position] => 1
[navtitel] => Startseite
)

[1] => Array
(
[seitennr] => 2
[unterseite_von] => 0
[ebene] => 0
[position] => 2
[navtitel] => Grafik
)

[2] => Array
(
[seitennr] => 3
[unterseite_von] => 0
[ebene] => 0
[position] => 3
[navtitel] => Photografie
)

[3] => Array
(
[seitennr] => 11
[unterseite_von] => 3
[ebene] => 1
[position] => 4
[navtitel] => Flora und Fauna
)

[4] => Array
(
[seitennr] => 12
[unterseite_von] => 3
[ebene] => 1
[position] => 5
[navtitel] => Architektur
)

[5] => Array
(
[seitennr] => 13
[unterseite_von] => 3
[ebene] => 1
[position] => 6
[navtitel] => Personen
)

[6] => Array
(
[seitennr] => 15
[unterseite_von] => 13
[ebene] => 2
[position] => 7
[navtitel] => U1 Personen13 EB2
)

[7] => Array
(
[seitennr] => 16
[unterseite_von] => 13
[ebene] => 2
[position] => 8
[navtitel] => U2 Personen 13 EB2
)

[8] => Array
(
[seitennr] => 17
[unterseite_von] => 16
[ebene] => 3
[position] => 9
[navtitel] => U1 Personen 16 EB3
)

[9] => Array
(
[seitennr] => 17
[unterseite_von] => 16
[ebene] => 3
[position] => 9
[navtitel] => U1 Personen 16 EB3
)

[10] => Array
(
[seitennr] => 14
[unterseite_von] => 3
[ebene] => 1
[position] => 11
[navtitel] => Edelsteine
)


soll Dartellung:

Array
(
[0] => Array
(
[seitennr] => 1
[unterseite_von] => 0
[ebene] => 0
[position] => 1
[navtitel] => Startseite
)

[1] => Array
(
[seitennr] => 2
[unterseite_von] => 0
[ebene] => 0
[position] => 2
[navtitel] => Grafik
)

[2] => Array
(
[seitennr] => 3
[unterseite_von] => 0
[ebene] => 0
[position] => 3
[navtitel] => Photografie
)

[3] => Array
(
[seitennr] => 11
[unterseite_von] => 3
[ebene] => 1
[position] => 4
[navtitel] => Flora und Fauna
)

[4] => Array
(
[seitennr] => 12
[unterseite_von] => 3
[ebene] => 1
[position] => 5
[navtitel] => Architektur
)

[5] => Array
(
[seitennr] => 13
[unterseite_von] => 3
[ebene] => 1
[position] => 6
[navtitel] => Personen
)

[6] => Array
(
[seitennr] => 15
[unterseite_von] => 13
[ebene] => 2
[position] => 7
[navtitel] => U1 Personen13 EB2
)

[7] => Array
(
[seitennr] => 16
[unterseite_von] => 13
[ebene] => 2
[position] => 8
[navtitel] => U2 Personen 13 EB2
)

[8] => Array
(
[seitennr] => 17
[unterseite_von] => 16
[ebene] => 3
[position] => 9
[navtitel] => U1 Personen 16 EB3
)


[9] => Array
(
[seitennr] => 14
[unterseite_von] => 3
[ebene] => 1
[position] => 11
[navtitel] => Edelsteine
)

ascer 17.04.2008 16:11:08

AW: Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen
 
PHP-Code:

$oberarray = Array();

$oberarray[0] = Array();
$oberarray[0]["nr"] = 1;

$oberarray[1] = Array();
$oberarray[1]["nr"] = 1;


for( 
$i 0$i < ( count($oberarray) - ); $i++ ){

   if( !empty(
$oberarray[$i] AND isset($oberarray[$i]) ){
      for( 
$a $i 1$a < ( count($oberarray) ); $a++ ){
         if( 
$oberarray[$i]["nr"] == $oberarray[$a]["nr"] ){
            unset(
$oberarray[$a]);
         }
      }
   }



Hab es jetzt nicht getestet aber sollte funktionieren, musst du sonst nochmal ein bisschen mit rumprobieren^^

Prinzip das da hinter steckt ist folgendes:
Sagen wir mal $oberarray hat 10 Einträge, dann durchläuft die obere Schleife die Einträge mit dem Index 0-8 und für jeden Index 0-8 wird die untere Schleife aufgerufen die dann die Indexnummer von der oberen Schleife übernimmt ( $a = $i + 1 ) und im Index einen weiter springt und ab dieser Position bis zum Ende des Arrays alle Einträge durchläuft und sie miteinander vergleicht...

Was dir in die Quere kommen könnte ist, wenn das $oberarry z.B. nicht von 0-9 im Index geht sonder z.B. 0, 3, 5, 7, 10 u.s.w. hat, dann müsstest du es vorher einmal sortieren, das es wieder 0-9 hat damit es geht...

Ob das so funzt, wie gesagt ka, bin grad rech müde und zu faul zum ausprobieren aber ich denke es sollte so in etwa funzen, das if( !empty ) ist dazu da um bereits gelöschte $oberarray[$a]'s nicht zu prüfen mit der unterschleife, so das er quasi gleich weiterspringt zum nächsten $oberarray[$i] in der oberschleife und nicht versucht einen bereits gelöschten eintrag mit irgendwas zu vergleichen...


gruß,
Ascer

PHoenix_KM 17.04.2008 18:19:53

AW: Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen
 
Vielen Dank Ascer, das war die lösung die ich brauchte :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:34:19 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.