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