Doppelte Werte übermehrere Arrays finden

Doppelte Werte übermehrere Arrays finden

am 23.07.2006 23:13:16 von newsonly2

Hallo NG,

ich habe 3 Arrays:
$array1=array("a","b","c");
$array2=array("1","2","3");
$array3=array("c","y","1");

nun möchte ich wissen, ob in diesen Arrays ein oder mehrere Werte (hier:
1 und c) mehrfach vorkommen. Bisher mache ich das so:

//ein Array draus machen
$merge_array=array_merge($array1,$array2,$array3);
//-> (a,b,c,1,2,3,c,y,1,) 9 Elemente

//Doppelte Arrayelemente entfernen
$unique_array=array_unique($merge_array);
//-> (a,b,c,1,2,3,y,) 7 Elemente, 1 und c war doppelt

//Wenn unique_array weniger Werte hat als merge_Array
if (count($unique_array) < count($merge_array)) {
echo "Werte doppelt";
// Welche Werte im Einzelnen doppelt sind geht dann mit
// array_count_values($merge_array), aber das ist erstmal zweitrangig.
}

Das tut zwar, sieht mir aber irnkwie zu kompliziert aus für die
Einfachheit der "Aufgabenstellung" und ich hab das dumpfe Gefühl, dass
das auch viel einfacher/sinnvoller geht. Wie?

Vielen Dank und Gruß,
Olly

Re: Doppelte Werte über mehrere Arrays finden

am 24.07.2006 01:47:20 von Johannes Vogel

Hi Oliver

Oliver C. Thornton wrote:
> ich habe 3 Arrays:
> $array1=array("a","b","c");
> $array2=array("1","2","3");
> $array3=array("c","y","1");
> nun möchte ich wissen, ob in diesen Arrays ein oder mehrere Werte (hier:
> 1 und c) mehrfach vorkommen. Bisher mache ich das so:
> //ein Array draus machen
> $merge_array=array_merge($array1,$array2,$array3);
> //-> (a,b,c,1,2,3,c,y,1,) 9 Elemente

Bis hierher wirst du wohl kaum optimieren können.

> //Doppelte Arrayelemente entfernen
> $unique_array=array_unique($merge_array);
> //-> (a,b,c,1,2,3,y,) 7 Elemente, 1 und c war doppelt
> //Wenn unique_array weniger Werte hat als merge_Array
> if (count($unique_array) < count($merge_array)) {
> echo "Werte doppelt";
> // Welche Werte im Einzelnen doppelt sind geht dann mit
> // array_count_values($merge_array), aber das ist erstmal zweitrangig.
> }

Ein alternativer Weg wäre wohl:
1. array_count_values()
2. array_flip()
3. unset($array[1]) und schauen, ob noch was übrig bleibt.
Das ist sicher nicht schöner!

Alternativ könntest du's von Hand machen:
function is_unique (&$array) {
for ($i=0;$i for ($j=$i+1;$j if ($array[$i]==$array[$j])
return false;
return true;
}

Im Fall einer Übereinstimmung bist du IMHO schneller als über
array_unique() - im Fall keiner Übereinstimmung solltest du gleich
schnell sein.

> Das tut zwar, sieht mir aber irnkwie zu kompliziert aus für die
> Einfachheit der "Aufgabenstellung" und ich hab das dumpfe Gefühl, dass
> das auch viel einfacher/sinnvoller geht. Wie?

Definiere 'einfacher' und 'sinnvoller'...

HTH, Johannes

Re: Doppelte Werte übermehrere Arrays fi nden

am 24.07.2006 02:03:36 von newsonly2

Di dalam de.comp.lang.php.misc Johannes Vogel menulis sebagai berikut:

Hi Johannes,

[weitere Lösungen gesnipped]

> > Das tut zwar, sieht mir aber irnkwie zu kompliziert aus für die
> > Einfachheit der "Aufgabenstellung" und ich hab das dumpfe Gefühl,
> > dass das auch viel einfacher/sinnvoller geht. Wie?
>
> Definiere 'einfacher' und 'sinnvoller'...

Ach, ich kenne mich. Ich hab schon mal 4 Wochen an einem 1000-Zeiler
rumgebastelt, mich in 100e if-while-for-Geschichten verrannt bis ein
Freund draufguckte und meinte: "Warum nimmst du nicht einfach
$standard_php_funktion() dafür." *seufz* da waren es noch 40 Zeilen.
Und eben weil ich manchmal den Wald vor lauter Bäumen nicht sehe frag
ich lieber mal nach wenn mir meine Lösung im Verhältnis zum Problem zu
kompliziert aussieht. (Besonders weil der Teil einige hundert Durchläufe
in dem Script hat)

Danke und Gruss,
Olly

Re: Doppelte Werte über mehrere Arrays finden

am 24.07.2006 02:12:20 von Niels Braczek

Oliver C. Thornton schrieb:

> ich habe 3 Arrays:
> $array1=3Darray("a","b","c");
> $array2=3Darray("1","2","3");
> $array3=3Darray("c","y","1");
>=20
> nun möchte ich wissen, ob in diesen Arrays ein oder mehrere Werte (hi=
er:=20
> 1 und c) mehrfach vorkommen.=20

http://de2.php.net/manual/en/function.array-intersect.php

ungetestet:

$doublettes =3D array_unique( array_merge(
array_intersect( $array1, $array2 ),
array_intersect( $array1, $array3 ),
array_intersect( $array2, $array3 )
);

Ob das aber wirklich einfacher ist ...

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Doppelte Werte über mehrere Arrays finden

am 24.07.2006 02:15:02 von Frank Schenk

Oliver C. Thornton schrieb:
> Hallo NG,
>
> ich habe 3 Arrays:
> $array1=array("a","b","c");
> $array2=array("1","2","3");
> $array3=array("c","y","1");
>
> nun möchte ich wissen, ob in diesen Arrays ein oder mehrere Werte (hier:
> 1 und c) mehrfach vorkommen. Bisher mache ich das so:
*schnipp*

http://www.php.net/manual/en/function.array-diff.php
bzw. Unterarten davon

hth, Frank