Einen Unique Array erstellen

04/03/2017 19:26 Royal*#1
Guten Abend liebe Community,

derzeitig verzweifle ich an einem relativ simplen Thema. Ich möchte momentan ein Array mit 10 ID's befüllen, welche ich aus meiner Datenbank hole, dies mache ich damit:

PHP Code:
while( $counter <= 10 ) {
  
$blacklist['$counter'] = rand1$max_ids );
  
$counter += 1;

Soweit so gut, dies funktioniert auch einwandfrei. Nun kommen auch doppelte ID's vor, was auch vollkommen logisch ist. Jedoch habe ich nun das Problem, das wenn ich die doppelten ID's rauslöschen möchte, dies nicht so funktioniert wie ich möchte. Das rauslöschen versuche ich damit:

PHP Code:
$blacklist array_unique($blacklistSORT_NUMERIC); 
Aus irgendwelchen, für mich nicht nachvollziehbaren, gründen, kommt hierbei immer wenn ich ausgeben möchte wie viele ID's darin gespeichert werden, der Wert 1 heraus. Die Länge ermittle ich so:

PHP Code:
$length count($blacklist); 
Ich muss ehrlich gestehen, ich bin mit meiner Logik etwas am Ende. Auch wenn es eigentlich ziemlich simple wirkt, komme ich nicht mehr voran.

Also, nochmal alles zusammengefasst, was genau ich machen möchte:

Ich möchte ein Array mit 10 verschiedenen ID's befüllen, hierbei lese ich diese aus einer Datenbank heraus und speichere sie mittels einer Schleife in einem Array. Durch eine Funktion, bzw. eine Logik, möchte ich das die doppelten ID's aus dem Array gelöscht werden und neue ID's hinzugefügt werden, welche es noch nicht im Array gibt. Das soll solange ausgeführt werden, bis die 10 ID's erreicht sind.

Es würde mich wirklich sehr freuen, wenn mir jemand bei diesem kleinen Logik Problem behilflich sein könnte.

Einen schönen Abend noch und ein großes Dankeschön im voraus!
04/03/2017 21:00 Shawak#2
Das könnte daran liegen, das array_unique eine hashmap zurückgibt.

Versuch doch mal mit foreach durch diese zu iterieren.
04/03/2017 21:09 florian0#3
Quote:
Originally Posted by Royal* View Post
PHP Code:
while( $counter <= 10 ) {
  
$blacklist['$counter'] = rand1$max_ids );
  
$counter += 1;

Keine Ahnung ob das schon ein Problem löst, aber hier darfst du keine Single-Quotes benutzen, sonst evaluiert die Variable nicht.

Ansonsten funktioniert dein Beispiel bei mir bestens:
Code:
/home/florian0/test.php:13:
array(11) {
  [0] =>
  int(5)
  [1] =>
  int(5)
  [2] =>
  int(5)
  [3] =>
  int(3)
  [4] =>
  int(1)
  [5] =>
  int(4)
  [6] =>
  int(4)
  [7] =>
  int(4)
  [8] =>
  int(3)
  [9] =>
  int(5)
  [10] =>
  int(5)
}
/home/florian0/test.php:13:
int(11)
/home/florian0/test.php:18:
array(4) {
  [0] =>
  int(5)
  [3] =>
  int(3)
  [4] =>
  int(1)
  [5] =>
  int(4)
}
/home/florian0/test.php:18:
int(4)

PS: Die Datenbank kann dir so eine Liste auch erstellen.
Code:
SELECT DISTINCT id 
FROM mytable 
ORDER BY rand() 
LIMIT 10
04/03/2017 21:23 Royal*#4
Vielen Dank für eure Antworten, aber ich hatte das Problem bereits gelöst, da scheinbar die Variablen doch nicht in den Array gespeichert wurden. Aber trotzdem, vielen Dank für eure Mühen! ;)
Wünsche euch einen schönen Abend. :)
04/03/2017 21:42 False#5
Quote:
Originally Posted by Royal* View Post
Guten Abend liebe Community,

derzeitig verzweifle ich an einem relativ simplen Thema. Ich möchte momentan ein Array mit 10 ID's befüllen, welche ich aus meiner Datenbank hole, dies mache ich damit:

PHP Code:
while( $counter <= 10 ) {
  
$blacklist['$counter'] = rand1$max_ids );
  
$counter += 1;

Soweit so gut, dies funktioniert auch einwandfrei. Nun kommen auch doppelte ID's vor, was auch vollkommen logisch ist. Jedoch habe ich nun das Problem, das wenn ich die doppelten ID's rauslöschen möchte, dies nicht so funktioniert wie ich möchte. Das rauslöschen versuche ich damit:

PHP Code:
$blacklist array_unique($blacklistSORT_NUMERIC); 
Aus irgendwelchen, für mich nicht nachvollziehbaren, gründen, kommt hierbei immer wenn ich ausgeben möchte wie viele ID's darin gespeichert werden, der Wert 1 heraus. Die Länge ermittle ich so:

PHP Code:
$length count($blacklist); 
Ich muss ehrlich gestehen, ich bin mit meiner Logik etwas am Ende. Auch wenn es eigentlich ziemlich simple wirkt, komme ich nicht mehr voran.

Also, nochmal alles zusammengefasst, was genau ich machen möchte:

Ich möchte ein Array mit 10 verschiedenen ID's befüllen, hierbei lese ich diese aus einer Datenbank heraus und speichere sie mittels einer Schleife in einem Array. Durch eine Funktion, bzw. eine Logik, möchte ich das die doppelten ID's aus dem Array gelöscht werden und neue ID's hinzugefügt werden, welche es noch nicht im Array gibt. Das soll solange ausgeführt werden, bis die 10 ID's erreicht sind.

Es würde mich wirklich sehr freuen, wenn mir jemand bei diesem kleinen Logik Problem behilflich sein könnte.

Einen schönen Abend noch und ein großes Dankeschön im voraus!
Wenn du eh jede ID nur einmal haben willst wieso hast du an dein SQL dann kein "GROUP BY" dran? (Performanter).

Alternativ kannst könntest du auch $array[$id] = xyz machen, somit würden die ids sich überschreiben. Bevorzuge jedoch GROUP BY oder array_unique.

P.s. wie florian auch schon sagte musst du bei $array["$variable"] doppel-Quotes nutzen, dann aber bitte mit geschweiften Klammern, besser ist jedoch wenn du die Quotes einfach weg lässt.

€: Wieso baust du mit einer While Schleife eine for Schleife (statt diese sofort zu nutzen) ?
Optimal wäre natürlich ein foreach über die Daten die du aus der Datenbank bekommst.
04/03/2017 21:58 Royal*#6
Quote:
Originally Posted by .ƒaℓsє. View Post
Wenn du eh jede ID nur einmal haben willst wieso hast du an dein SQL dann kein "GROUP BY" dran? (Performanter).

Alternativ kannst könntest du auch $array[$id] = xyz machen, somit würden die ids sich überschreiben. Bevorzuge jedoch GROUP BY oder array_unique.

P.s. wie florian auch schon sagte musst du bei $array["$variable"] doppel-Quotes nutzen, dann aber bitte mit geschweiften Klammern, besser ist jedoch wenn du die Quotes einfach weg lässt.

€: Wieso baust du mit einer While Schleife eine for Schleife (statt diese sofort zu nutzen) ?
Optimal wäre natürlich ein foreach über die Daten die du aus der Datenbank bekommst.
Das passiert wenn ich am verzweifeln bin, dann mache ich aus etwas simplen etwas kompliziertes oder unnötiges. Kleine Macke meinerseits. :)

Bei dem "GROUP BY" kann ich da auch die ID's anhand einer zufälligen Reihenfolge entnehmen?

Grüße
04/03/2017 23:07 False#7
Quote:
Originally Posted by Royal* View Post
Das passiert wenn ich am verzweifeln bin, dann mache ich aus etwas simplen etwas kompliziertes oder unnötiges. Kleine Macke meinerseits. :)

Bei dem "GROUP BY" kann ich da auch die ID's anhand einer zufälligen Reihenfolge entnehmen?

Grüße
"GROUP BY id" sorgt nur dafür das bei den Daten die ausgegeben werden die Ids unique sind und hat keinen Einfluss auf die Sortierung.