PHP Array bearbeiten

Cool Master

Fleet Admiral
Registriert
Dez. 2005
Beiträge
37.477
Moin,

ich habe hier ein kleinen Array:

PHP:
$semester = array();
for ($i = 0; $i < count($stack); $i++) {
    if (isset($stack[$i]['semester'])) {
        if (!in_array($stack[$i]['semester'], $semester)) {
            array_push($semester, $stack[$i]['semester']);
        }
    }
}

So das Gibt diese Ausgabe raus:

PHP:
Array
( 
[0] => WS/2012/2013 
[1] => SS/2012
[2] => WS/2011/2012
[3] => WS/2009/2011
[4] => WS/2009/2010
[5] => SS/2000
)

Das Problem das ich nun aber habe und welches ich mir nicht erklären kann, da in der DB kein "/" drin ist. Hinter WS/SS das erste "/" sollte da nicht sein. Wie kann ich nun dem Array sagen, dass er hinter den ersten zwei zeichen statt dem "/" ein leerzeichen macht? Ich komme einfach nicht auf den Befehl mit dem ich arbeiten muss. Ich habe zwar schon wein wenig mit str_replace gespielt aber das will alles nicht so :(
 
Ersetze das erste Vorkommen des Forward-Slashes durch ein Leerzeichen. Dazu kannst du entweder einen Regex schreiben, oder dir selbst etwas mit PHP-Bordfunktionen basteln (zB strpos, substr). Wenn dir letzterer Vorschlag reicht, kannst du auch eine bereits fertige Funktion wählen, die in der PHP-Dokumentation als Kommentar zu str_replace() vorhanden ist.

Aus ...

array_push($semester, $stack[$i]['semester']);

... wird dann ...

array_push($semester, str_replace_once("/"," ",$stack[$i]['semester']));

... und es sollte eigentlich funktionieren.
 
Ok das klappt schon mal danke dafür :)

Allerdings gibt er mir jetzt deutlich mehr aus ales es eigentlich sein sollte :D

Code:
Array
(
[0] => WS 2012/2013
[1] => WS 2011/2012
[2] => WS 2011/2012
[3] => WS 2009/2011
[4] => WS 2009/2010
[5] => SS 2000
[6] => SS 2000
[7] => SS 2000
[8] => SS 2000
[9] => SS 2012
[10] => SS 2012
[11] => SS 2000
[12] => SS 2000
[13] => SS 2000
[14] => SS 2000
[15] => SS 2000
[16] => SS 2000
[17] => SS 2000
[18] => SS 2000
[19] => SS 2000
[20] => SS 2000
[21] => SS 2000
[22] => SS 2000
[23] => SS 2000
[24] => SS 2000
[25] => SS 2000
)

Hast du dafür zufällig eine Lösoung?
 
Bevor ich hier was machen würde, würde ich dem mal auf den Grund gehen:
Cool Master schrieb:
Das Problem das ich nun aber habe und welches ich mir nicht erklären kann, da in der DB kein "/" drin ist.

Egal:
Code:
$a = Array
(
0 => 'WS/2012/2013',
  1 => 'SS/2012',
  2 => 'WS/2011/2012',
  3 => 'WS/2009/2011',
  4 => 'WS/2009/2010',
  5 => 'SS/2000'
);

foreach( $a as &$i )
{
  $i = explode( '/', $i, 2 );
  $i[1] = str_replace( '/', ', ', $i[1] );
  $i = implode( ' ', $i );
}
Code:
Array
(
    [0] => WS 2012, 2013
    [1] => SS 2012
    [2] => WS 2011, 2012
    [3] => WS 2009, 2011
    [4] => WS 2009, 2010
    [5] => SS 2000
)
 
Ok "kein" war schlecht ausgedrückt es ist ein "/" drinne bei den WS. Und zwar immer bei den Zahlen also z.B. 2011/2012, 2012/2013 usw. Allerdings kommt direkt nach dem WS und SS kein "/" in der DB steht es so Drin:

WS 2011/2012
SS 2012
WS 2012/2013

usw.
 
Cool Master schrieb:
Allerdings kommt direkt nach dem WS und SS kein "/" in der DB steht es so Drin

Dann solltest du die Ursache (falsches Auslesen aus der Db?) untersuchen und nicht versuchen da am Schluss ein großes Pflaster drüberzukleben, welches die falsche Formatierung wieder behebt. Ich würde auch fast meine Hand dafür ins Feuer legen, dass die Daten korrekt aus der Db kommen, du aber (unbewusst?) an irgendeiner Stelle diesen falschen Slash einbaust.
 
Anstatt nur '/' durch ein Leerzeichen zu ersetzen, ersetzt du einfach 'S/' durch 'S '.
Dann fliegt überall nach WS oder SS der '/' raus nur zwischen den Jahren nicht.
An Yuuris ''Egal-Lösung''-angelehnt.
 
Cool Master schrieb:
Allerdings gibt er mir jetzt deutlich mehr aus ales es eigentlich sein sollte :D
Hast du dafür zufällig eine Lösoung?
Ich habe die vorangehende If-Überprüfung nicht beachtet. Der folgende Code müsste funktionieren:

PHP:
$semester = array();
for ($i = 0; $i < count($stack); $i++) {
    if (isset($stack[$i]['semester'])) {
        if (!in_array(str_replace_once("/"," ",$stack[$i]['semester']), $semester)) {
            array_push($semester, str_replace_once("/"," ",$stack[$i]['semester']));
        }
    }
}
 
Zurück
Oben