Vergleichen und gruppieren

X-SIX

Grünschnabel
Hallo zusammen,

ich bin neu hier und hab natürlich gleich mal ne Frage:

Kann man mit PHP Werte vergleichen und gruppieren, ähnlich MySQL.

Ich habe da z.B. an sowas wie...

$variable1 = 10;
$variable2 = 15;
$variable3 = 15;
$variable4 = 15;
$variable5 = 10;

gedacht. Nun wäre es super, wenn eine Antwort...

10 und 15

wäre. Sorry wenn ich mich umständlich ausdrücke. Ich will wissen, wieviele unterschiedliche Werte in den Vars sind und die dann gruppiert ausgeben (reiner Wert reicht).

Hoffe ihr habt nen Tipp, ohne 1000 verschachtelte IF Abfragen....

Vielen Dank im Voraus.:confused:
 
Ähm, ich würde dir raten das ganze mit 1000 verschachtelten if-Verzweigungen zumachen. ;)

Sollten die Variablennamen einer Struktur folgen wie in deinem Beispiel:
PHP:
for( i=1; i<=1000; i++ ) {
	$gruppen[${'variable'.$i}]++;
}
echo "<pre>",print_r($gruppen),"</pre>";

Zählt quasi die selben Werte.
 
Zuletzt bearbeitet:
Fast hättest Du mir gerade mal so das Leben gerettet :)

Abgesehen, dass Du die $-Zeichen vorm i vergessen hast, ergibt das bei mir folgende Bildschirmausgabe:

Array
(
[10] => 2
[15] => 3
)
1

Soweit echt klasse, aber für mich noch nicht ganz optimal, da ich die beiden Werte ja ansprechen muss und ich daher nicht im Voraus weis wieviele unterschiedliche Werte ich bekomme.

Optimal wäre sowas wie - Unterschieliche Werte: 2 (und nicht die Anzahl der Werte selbst), nämlich Variable1 und Variable2.

Ich weiß das ist blöd, deshalb grübele ich auch schon die ganze Zeit. :confused:
 
PHP:
$variable1 = 10;
$variable2 = 15;
$variable3 = 15;
$variable4 = 15;
$variable5 = 10;

$valArr = Array();

for( $i=1; $i<6; $i++ ) {
    $valArr[] = ${'variable'.$i};
}
print_r(array_unique($valArr));

Gibt:
Array ( [0] => 10 [1] => 15 )
 
Oder man löst es mit ner foreach Schleife:
PHP:
for( $i=1; $i<=1000; $i++ ) {
    $gruppen[${'variable'.$i}]++;
}

echo "Verschiedene Werte: ".count($gruppen). "<br>";

foreach( $gruppen as $wert => $anzahl ) {
	echo "$wert kommt $anzahl mal vor. <br>";
}
 
Fast geschafft.

Ich habe es fast geschafft :)

Aber eben nur fast.....

PHP:
<?php
$variable1 = 10;
$variable2 = 15;
$variable3 = 15;
$variable4 = 15;
$variable5 = 10;

$valArr = Array();

for( $i=1; $i<6; $i++ ) {
    $valArr[] = ${'variable'.$i};
}

asort($valArr);

for( $i=0; $i<=(count(array_unique($valArr))-1); $i++ ) {
    
    echo 'Wert '.($i+1).' : '.$valArr[$i].'<br/>';
}
?>

Wert 1 : 10
Wert 2 : 15

Soweit cool ABER ich weiß einfach nicht, wie ich dann die betreffenden Felder ansprechen soll.
Ändere ich oben einen Wert mehr, z.B.

$variable1 = 10;
$variable2 = 15;
$variable3 = 15;
$variable4 = 15;
$variable5 = 9;

Dann habe ich ja 3 verschiedene Werte im Array. Ergibt dann bei meinem Code-Schnipsel:

Wert 1 : 10
Wert 2 : 15
Wert 3 : 15

weil ich Array-Platz 3 anspreche... :(

Gewünscht wäre aber

Wert 1 : 10
Wert 2 : 15
Wert 3 : 9

oder noch schöner

Wert 1 : 9
Wert 2 : 10
Wert 3 : 15

Vielleicht könnt ihr nochmal drüber schauen und meinen Denkfehler beseitigen...

*** Mittlerweile wäre ich auch mit den 1000 verschachtelten if-Verzweigungen fertig :p:p:p ***
 
weil ich Array-Platz 3 anspreche...

Richtig.

Du hast das array_unique ja auch beim count übernommen, hast die funktion aber nicht auf das Array angewendet.
Bedeutet: valArr bleibt wie es ist und die for Schleife wird für die Anzahl der von Array_unique ausgeführt.

So wäre es richtig:
PHP:
<?php
$variable1 = 10;
$variable2 = 15;
$variable3 = 15;
$variable4 = 15;
$variable5 = 9;

$valArr = Array();

for( $i=1; $i<6; $i++ ) {
    $valArr[] = ${'variable'.$i};
}

asort($valArr);

$valArr = array_values(array_unique($valArr));

for( $i=0; $i<=(count($valArr)-1); $i++ ) {
    echo 'Wert '.($i+1).' : '.$valArr[$i].'<br/>';
}

?>

array_unique liefert dir ein Array ohne duplikate aber mit den alten Keys.
Deswegen dann noch das array_values(), welches quasi die Keys neu vergibt.

Ergibt:
Wert 1 : 9
Wert 2 : 10
Wert 3 : 15
 
Klappt - JUHUUUU ;-)

Manchmal sind es eben die kleinen Dinge des Lebens :eek: und man sieht den Wald vor Bäumen nicht.

Vielen lieben Dank für die komptente und vor Allem schnelle Hilfe!
 
Zurück