Array-Duplikate entfernen??
paul
- php
0 Peter Nack0 paul
1 dedlfix
hallo allerseits,
ich habe ein mehrdimensionals array, das wie folgt aufgebaut ist:
Array
(
[0] => Array
(
[Nummer] => 971.260
[Stueckzahl] => 1
)
[1] => Array
(
[Nummer] => 971.260
[Stueckzahl] => 2
)
[2] => Array
(
[Nummer] => 554.242
[Stueckzahl] => 2
)
[3] => Array
(
[Nummer] => 971.260
[Stueckzahl] => 1
)
)
ich möchte alle Arrays entfernen, bei denen der wert des schlüssels[Nummer] doppelt oder öfter in einem anderen Array vorhanden ist. es soll immer nur das Array mit der höchsten vorhandenen index-zahl übrigbleiben, also sollten z.b. die Arrays mit dem index [0] und [1] gelöscht werden, weil im index [3] im array wieder der wert '971.260' beim schlüssel [Nummer] steht.
kann man das mit einer standard-php-funktion erreichen, bzw. wie müsste eine eigene aussehen? danke!
Hallo Paul,
welches dieser Beispiele hast du bereits probiert und wo genau bist du auf Probleme gestoszen?
MfG
Peter
hi peter,
welches dieser Beispiele hast du bereits probiert und wo genau bist du auf Probleme gestoszen?
ich habe mir die array_unique() - funktion angesehen, die aber per se nicht für mehrdimensionale arrays funktioniert. ich habe mir dann auch die beispiele angesehen, bin aber irgendwie nicht weitergekommen. dann habe ich diese beispiele durchgesehen. ich habe alle hier beschriebenen funktionen über mein array laufen lassen, bekomme aber immer als result wieder das gesamte array. vermutlich liegt es an der mehrdimensionalität? muss ich die funktion noch zusätzlich über eine foreach schleife laufen lassen? ich checks leider grad garnicht. kannst du mir vielleicht auf die sprünge helfen? danke!
p
Hi!
ich möchte alle Arrays entfernen, bei denen der wert des schlüssels[Nummer] doppelt oder öfter in einem anderen Array vorhanden ist. es soll immer nur das Array mit der höchsten vorhandenen index-zahl übrigbleiben, [...]
Leg als Zwischenschritt ein Array an, das als Key deinen Unique-Wert bekommt und als Wert die Nummer des betroffenen Datensatzes, also dessen Index.
$temp = array();
foreach ($deinArray as $index => $record)
$temp[$record['Nummer']] = $index;
Nun hast du in $temp eine duplikatlose Sammlung von Index-Nummer von $deinArray. Wenn $record['Nummer'] schon als Key in $temp vorhanden war, dann hat der neue Wert von $index den alten ersetzt. Voraussetzung ist, dass $deinArray schon richtig sortiert ist, also dass die Datensätze je "aufzuhebenster" desto weiter hinten stehen. Die Schlüssel in $temp interessieren nun nicht weiter, es kommt nur darauf an, welche Index-Nummern als Werte enthalten sind. Jetzt kannst du $deinArray durchlaufen und alle Schlüssel ignorieren, die nicht als Wert in $temp enthalten sind.
Lo!