Array aussortieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
code
doppelte entfernen
erledigt beitrag
filter
frohe weihnachten
funktion
geliefert code
index
nachzulesen
projekt
raten
reihenfolge
rutsch
schritt
umschreibung
variablen einsparen
verarbeitung
vergeben
weihnachtsferien
-
Hallo
Ich suche eine Funktion mit der ich alle Werte die einen bestimmten Wert haben herauslösche und dann soll die Index neu so vergeben werden, dass nicht Lücken dazwischen entstehen:
ich versuch das in einem Beispiel besser darzustellen:
$array[0]=1;
$array[1]=-1;
$array[2]=5;
$array[3]=8;
$array[4]=2;
$array[5]=-3;
$array[6]=-1;
Jetzt möchte ich alles -1 herauslöschen und dann alle werte so neu zuordenen, dass die reihenfolge erhalten bleibt aber, die Lücken entfernt werden!
$array[0]=1;
$array[2]=5;
$array[3]=8;
$array[4]=2;
$array[5]=-3;
____________________
$array[0]=1;
$array[1]=5;
$array[2]=8;
$array[3]=2;
$array[4]=-3;
So soll das Endprodukt dann praktisch aussehen :)
ich hoffe ich hab das einigermaßen gut geschildert !!
bedanke mich schon mal im voraus für antworten
mfg sRos
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dazu nehme man array_unique().
Näheres wie immer in der PHP Doku nachzulesen.
//edit: Die Schlüssel bleiben dann aber erhalten. Du müsstet also noch manuell einmal das Array mit neuen Indexen erstellen oder schreibst dir selbst eine Funktion die das arangiert. Ist mit zwei einfachen For-Schleifen schnell erledigt.
Beitrag geändert: 23.11.2007 10:39:25 von evil-devil -
sorry, aber array_unique() bringt dir da gar nix!
Weil das tut wie es schon sagt doppelte entfernen und
zu einem machen also wenn du [4] = -1 und [7] =-1 hattest
hast dann noch nur [4] = -1 ich würde dir eher dazu
raten eine funktion zu schreiben die einfach alle felder
durchgeht und die die du willst schreibt er in ein neues
Array und das wird zurück geliefert
<?php function cutOff ( $array ) { $newArr = array(); foreach ( $array as $value ) { if ( $value != -1 ) $newArr[] = $value; } return $newArr; } ?>
-
Alternativ könntest du es auch mit einer Callbackfunktion machen...
<?php // Callbackfunktion zu array_filter() function ist_zahl_positiv($var) { return (intval($var) > 0) ? true : false; } // Input $arr_test = array(1, -1, 3,-5,2,-8,9); // Verarbeitung - filter Werte $filt = array_filter($arr_test, 'ist_zahl_positiv'); // neues Array generieren aus den gefilterten Werten $new = array_values($filt); // Ausgabe var_dump($new); ?>
Die Callbackfunktion "ist_zahl_positiv" prüft ob das Element positiv ist und gibt bei Erfolg true zurück sonst false. Alle true-Werte werden von array_filter im Array belassen.
Array_values() erstellt dann ein neues Array mit durchgehendem Index.
Grüßle
Edit: Natürlich kannst du noch einige Variablen einsparen, aber um die einzelenen Schritte hervorzuheben, hab ich diese mal drin gelassen. Bei der Callbackfkt. kannst du natürlich auch genau auf einen Wert prüfen - wie gesagt es muß einfach true oder false am Ende raus kommen.
Beitrag geändert: 23.11.2007 17:28:31 von scout -
sirseven schrieb:
<?php function cutOff ( $array ) { $newArr = array(); foreach ( $array as $value ) { if ( $value != -1 ) $newArr[] = $value; } return $newArr; } ?>
Das geht noch besser, wenn er alles doppelte entfernen will:
<?php function exterminate_double( $array ) { $newArr = array(); foreach ( $array as $value ) { if (array_search($value) === false) $newArr[] = $value; } return $newArr; } ?>
Etwas besser umschreibung wäre vllt noch schöner für uns, sros.
-AlienDwarf -
Es tut mir sehr sehr leid, dass ich erst jetzt schreibe aber aufgrund des stresses in der schule hatte ich das projekt aufgeschoben und nehme mir jetzt in den weihnachtsferien wieder zeit..
hab das ganze probiert und die funktion von SIRSEVEN funktionier einwandfrei.. herzlichen dank!
DANKE, mfg und frohe weihnachten im nachhinein & einen guten rutsch :)
sRos -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage