array_unique() löscht zuviele Einträge raus

Matze202

Erfahrenes Mitglied
Hiho @all,

bin mal wieder da, nach dem ich bissel Pause machen musste.

Mein Problem mit folgendem Code ist, dass irgendwie beim auftauchen eines doppelten Wertes, alle Einträge des Array außer dem letzten entfernt werden.

PHP:
  $c = count($page);
  $page2 = array_unique($page);
  if($page != $page2){
    for($i = 0; $i < $c; $i++){
      $p_loc = $page2[$i];
      if($i+1 < $c){
        $p_loc = '/';
      }
    }
    location($p_loc);
  }

array(5) {
[0]=>
string(4) "plan"
[1]=>
string(3) "xyz"
[2]=>
string(7) "kontakt"
[3]=>
string(4) "plan"
[4]=>
string(5) "login"
}
Aus diesem Array-Inhalt entsteht folgendes:
array(1) {
[0]=>
string(5) "login"
}
anstatt:
array(4) {
[0]=>
string(4) "plan"
[1]=>
string(3) "xyz"
[2]=>
string(7) "kontakt"
[3]=>
string(5) "login"
}
Gewollt ist aber, dass die mehrfach vorhandenen Werte, nur auf einen Wert reduziert werden, welcher sich an der Position in dem Array befinden soll, wo die erste Fundstelle des Wertes ist. So wie ich es hier verstanden habe: http://php.net/manual/de/function.array-unique.php

Ich hoffe es sieht jemand den Fehler.

Gruß Matze202.
 
Die Kurzantwort ist: Du überschreibst $p_loc immer wieder. Das ist vermutlich nicht das, was du willst. (Der "="-Operator ist nicht der ".="-Operator.)

Das hier sollte es aber auch tun:

PHP:
$p_loc = implode('/', array_unique($page));

(Die Logik in deinem Code ist etwas abenteuerlich. Du greifst etwa auch auf Schlüssel von $page2 zu, die überhaupt nicht existieren.)
 
Super, ich danke dir sehr für die Schützenhilfe nach dem klitze kleinen Fehlerchen mit der großen Wirkung.

Die $page2 wird doch in der Zeile 2 geschrieben und wird später benötigt, wenn der $p_loc zusammengesetzt wird, den ich dann brauch um die URL per Location-Weiterleitung abzuändern.
 
Ich sage ja nur, dass du $p_loc auch einfacher (und richtiger) zusammensetzen kannst.

PHP:
$page = array('plan', 'xyz', 'kontakt', 'plan', 'login');

$p_loc = implode('/', array_unique($page));

var_dump($p_loc); // string(22) "plan/xyz/kontakt/login"
 
ahhhh, stimmt danke dir sehr ;)

wenn ich zurück denke, fällt mir nun auch ein, dass ich früher schon gern mit implode gearbeitet hatte, aber irgendwie ist der Befehl mir in Vergessenheit geraten.
 

Neue Beiträge

Zurück