2 arrays vergleichen > werte löschen in neuem array

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

2 arrays vergleichen > werte löschen in neuem array

Beitrag 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

Code: Alles auswählen

$array_1(eintrag_4,eintrag_5, eintrag_6)  
..vergleich mit..

array_2

Code: Alles auswählen

$array_2(eintrag_1, eintrag_2, eintrag_4, eintrag_5, eintrag_6, eintrag_7)   
..soll ergeben:

Code: Alles auswählen

$array_3(eintrag_1, eintrag_2, eintrag_7)   
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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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:

Code: Alles auswählen

Array
(
    [0] => 1
    [1] => 2
    [5] => 7
)
Evtl. möchtest du am Schluss noch [php:array_values] anwenden, um stattdessen folgendes zu bekommen:

Code: Alles auswählen

Array
(
    [0] => 1
    [1] => 2
    [2] => 7
)
KB:knigge
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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.
KB:knigge
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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:

Code: Alles auswählen

$array1 = array("wert1", "wert2", "wert3");   
dann funktionierts. es ist zum mäusemelken.
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag von djchrisnet »

haben alle werte auch die selbe kodierung? enthalten sie sonderzeichen?
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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:

Code: Alles auswählen

    $array1 = array("wert1", "wert2", "wert3");    
dann funktionierts.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: 2 arrays vergleichen > werte löschen in neuem array

Beitrag 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.
KB:knigge
Antworten

Zurück zu „Coding & Technik“