Seite 1 von 2
2 arrays vergleichen > werte löschen in neuem array
Verfasst: 03.09.2009 21:00
von 4seven
hallo leutz,
hab selten genug fragen, daher hoffe ich auf baldige antworten.
ich habe
zwei arrays, die ich miteinander vergleichen möchte.
dabei sollen die werte, die in
beiden arrays vorkommen,
einen dritten generieren, aus dem genau diese werte rausfliegen.
array_1
..vergleich mit..
array_2
Code: Alles auswählen
$array_2(eintrag_1, eintrag_2, eintrag_4, eintrag_5, eintrag_6, eintrag_7)
..soll ergeben:
hab schon alle register gezogen, array_diff, in_array und derivate, if, foreach und while, ++$i,
was weiß ich was noch alles. also, keine lösung bis jetzt.
das kann doch nicht so schwer sein?
sehe da iA warsch. nur den wald vor läuter bäumen nicht und es ist ganz einfach..
greez
4seven
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 03.09.2009 21:18
von Pyramide
Code: Alles auswählen
$array1 = array(4,5,6);
$array2 = array(1,2,4,5,6,7);
$array3 = array_diff($array2, $array1);
print_r($array3);
Ergebnis:
Evtl. möchtest du am Schluss noch [php:array_values] anwenden, um stattdessen folgendes zu bekommen:
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 03.09.2009 22:23
von 4seven
danke erstmal
das hatte ich zwar schon probiert, geht auch wunderbar in den beispielen. hab meinen code nochmals überprüft. hier habe ich in einem schaltwerk mehrfach mit preg_replace gesplittet, mit explode gearbeitet und das dann in ein array gepumpt. hier funktioniert es nicht.
möglicherweise muss ich nochmal das splitting überprüfen oder mit implode arbeiten, um eine "saubere" indexierung des arrays für die spätere array_diff -aufbearbeitung hinzubekommen.
bei dem teil meines codes, der ein echtes, "sauberes" (also nicht generiertes) array enthält, funktioniert es bestens.
greez
4seven
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 03.09.2009 22:59
von Pyramide
Wie das Array entstanden ist, hat auf die Funktion array_diff selbst eigentlich keinen Einfluss. Du könntest ja mal einen soweit reduzierten/vereinfachten Code posten, bei dem das Problem noch auftritt.
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 04.09.2009 09:58
von djchrisnet
möglicherweise ist der index der array unterschiedlich, also so:
Code: Alles auswählen
$array1 = array(4,5,6);
$array2 = array('1','2','4','5','6','7');
$array3 = array_diff($array2, $array1);
print_r($array3);
versuch mal mit var_dump() array 1 und 2 aufzulisten und genauer zu vergleichen.
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 04.09.2009 21:52
von 4seven
danke an euch beide. der befehl var_dump ist dabei hilfreich. das es sowas in der richtung sein könnte (nicht identischer index der beiden arrays) dachte ich mir schon beinahe. werd es nachher gleich checken.
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 06.09.2009 14:33
von 4seven
so, hier mal das dump-ergebnis. es ist zum wahnsinnig werden.
array1
Code: Alles auswählen
array(3) { [0]=> string(58) "wert1" [1]=> string(52) "wert2" [2]=> string(58) "wert3" }
hinweis: setzt sich auch bei mehreren werten so fort: string(58) ... string(52) usw..
array2
Code: Alles auswählen
array(5) { [0]=> string(48) "wert1" [1]=> string(54) "wert2" [2]=> string(48) "wert3" [3]=> string(54) "wert4" [4]=> string(48) "wert5" }
hinweis: setzt sich auch bei mehreren werten so fort: string(48) ... string(54) usw..
differenz-ergebnis -> $array3 =array_diff($array2, $array1);
Code: Alles auswählen
array(5) { [0]=> string(48) "wert1" [1]=> string(54) "wert2" [2]=> string(48) "wert3" [3]=> string(54) "wert4" [4]=> string(48) "wert5" }
ziel ist, das (wert1, wert2, wert3) von array1 aus dem array3 rausfliegt. hab schon zig sachen versucht, multisort, unique, unique key, indexierung löschen, alle möglichen hilfsfunktionen etc. etc. etc. - immer wieder das gleiche ergebnis - er will und will mir das nicht rausziehen. und ja, vor foreach-schleifen wurden natürlich die index'es via array(); testweise geleert. mit oder ohne leerung bringt aber dasselbe - erstelle ich den array1 manuell:
dann funktionierts. es ist zum mäusemelken.
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 06.09.2009 15:53
von djchrisnet
haben alle werte auch die selbe kodierung? enthalten sie sonderzeichen?
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 06.09.2009 16:05
von 4seven
nein, sonderzeichen, leerstellen etc. wurden vorher sauber extrahiert (trim usw.)
ferner, würde es beim manuellen array-erstellen dann ja auch nicht gehen:
erstelle ich den array1 manuell:
dann funktionierts.
Re: 2 arrays vergleichen > werte löschen in neuem array
Verfasst: 06.09.2009 17:57
von Pyramide
Pyramide hat geschrieben:Du könntest ja mal einen soweit reduzierten/vereinfachten Code posten, bei dem das Problem noch auftritt.
Ohne entsprechenden Code können wir hier nur lustiges Rätselraten spielen. Insbesondere die Tatsache, dass der String "wert1" angeblich einmal als string(58) und einmal als string(48) ausgegeben wird, kann ich mir nur so erklären, dass selbst das bisschen Code, was du hier gepostet hast, nicht dem Original entspricht.