PHP Array bearbeiten

Cool Master

Fleet Admiral
Dabei seit
Dez. 2005
Beiträge
28.516
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 :(
 

Karol_

Lieutenant
Dabei seit
Juni 2009
Beiträge
574
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.
 

Cool Master

Fleet Admiral
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
28.516
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?
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.574
Bevor ich hier was machen würde, würde ich dem mal auf den Grund gehen:
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
)
 

Cool Master

Fleet Admiral
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
28.516
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.
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
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.
 

DasBoeseLebt

Lieutenant
Dabei seit
Jan. 2010
Beiträge
686
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.
 

Karol_

Lieutenant
Dabei seit
Juni 2009
Beiträge
574
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']));
        }
    }
}
 
Top