String Eingabe aufteilen ( php.)

Doom Lord

Lt. Junior Grade
Registriert
Apr. 2008
Beiträge
356
Hallo,

Also es soll eine Aufzählung als Eingabe erfolgen die etwa so aussieht [ Mathe 3, Deutsch 3, BIO 2, ....]

immer jeweils das was zwischen den " , " steht soll in eine Array Zelle geschrieben werden.


dort soll dann nur mit dem jeweiligen integer gerechnet werden (durchschnitt, sortieren, ..) das sollte ja eigentlich kein Problem darstellen.

Es geht nur um das WIE aufteilen.

Laut meinem Lehrer ist es möglich. Ja es ist eine Hausaufgabe.

wäre über einen Tipp etc. sehr glücklich :)
 
explode
strtok
preg_match_all
 
Also String Split ist ja scheinbar veraltet ... ich weiß nun nicht ob ich das noch benutzen sollte es wäre aber eigentlich was ich suche


Bei explode ist mir nicht ganz klar wie es funktionieren soll, da ich die Anzahl der Eingaben ja vorher kennen müsste.


strtok erscheint mir auch sinnvoll nur ist mir da nicht ganz klar wie ich die strings dann in ein Array bekomme ( oder muss ich das zum sortieren / rechnen vielleicht garnicht? )


Wie schon gesagt ziemlicher Neuling
Danke für die Antworten!
Das Problem war das finden. Es gibt ja unmengen an Befehlen und ich wusste nicht recht wie ich formulieren muss was ich suche.



EDIT code bisher

<body>
<center><b><h1>Notenrechner</h1></b></center>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<center><b>Gebe deine F&auml;cher und die Noten ein:</b><br /> (z.B. Mathe2, Deutsch3)<br />
<input type="text" name="text" value="Mathe3, Englisch1" size="80" maxlength="50" /><br />
<input type="submit" name="button" value="Noten sortieren" /></center>
<br /><br /><br />
</form>
<?php
if(isset($_POST['button'])) {;
$werte = $_POST['text'] ;

echo "$werte </br></br> " ; }


$werte = strtok($werte, " \n\t");

while ($werte !== false) {
echo " $werte <br />";
$werte = strtok(" \n\t");
}
$abc = array($werte);


?>
</body>
 
Zuletzt bearbeitet:
Richtig, deprecated php funktionen sollte man nicht mehr verwenden, gibt nervige warnings bei der aktuellen Version.

nehm explode, der limit Parameter ist wie in der Doku beschrieben optional...
http://de2.php.net/explode

PHP:
$s = "Mathe 3, Deutsch 3, BIO 2,";
$array = explode(',', $s);
print_r($array);

mit preg_match_all könnte man interessantere Dinge basteln, da du aber recht wenig Ahnung von PHP hast, würd ich das Thema Reguläre Ausdrücke auf später verschieben...
 
gut also der Explode Befehl funktioniert gut.

Ich habe mir nun die funktionen zum array sortieren durchgelesen habe aber noch kein gewünschtes ergebnis erzielt :freak:


ich denke ksort wäre das richtige da dort nach den keys sortiert wird...

was ich möchte:

indiziertes array das aus strings wie ( blabla 12, blop 5, ac 7, ...) und diese nur nach der zahl sortieren

also
blop 5
ac 7
blabla 12

oder muss ich mit sort ($array,SORT_NUMERIC) arbeiten??
 
Weder noch.

Damit wir uns nicht falsch verstehen:
- du hast eine Eingabe "foo 3, bar 2, foobar 5, barfoo 1"
- du löst n $arrEingabe = explode(",",$_POST["eingabe"]) aus

Dein Ergebnis-Array $arrEingabe ist jetzt kein assoziatives Array ("key"->"value"), sondern n stinknormales fortlaufendes mit nem Index, quasi so:
$arrEingabe[0] == "foo 3", $arrEingabe[1] == "bar 2",....

Du kannst hier nicht nach Key sortieren, denn der Key ist schon sortiert (n fortlaufender Index). Du musst dir eine eigene Sortierfunktion schreiben, die nach Value sortiert, aber dabei vorher nochmal den String aufteilt in Wort und Zahl.
Oder, wenn du genau weißt, dass jedes der "Worte" einzigartig ist, kannst du dein Eingabe-Array ja nochmal verwursten und in ein Key->Value - Paar ("foo" -> 3) umwandeln und daraus n neues assoziatives Array bauen. das könnt man dann durchaus sortieren.
 
achso.. key bezieht sich auf die indizes - dann ist das natürlich völlig klar

Das es kein assoziatives ist war mir klar.


Also gibt es keine sortierfunktion die nur Zahlen beachtet? Wie gesagt ich habe wneig Ahnung, dachte mir nur das es soetwas doch geben muss...

Mag sein das mein Lösungsweg etwas umständlich ist... Ich würde eben gerne nur ein einziges Eingabefeld haben.

Danke für die Infos schonmal
 
Du kannst halt entweder den bestehenden nicht-assoziativen Array, dessen Werte jeweils ein String aus Wort+Zahl sind, durch eine selbstgeschriebene Sortierfunktion schicken, oder du schickst den Array durch n eigenen kleinen Splitter, der aus Wort+Zahl einen neuen assoziativen Array aufbaut mit key=wort, value=zahl.

Vorsicht: Nachmitternachts-Pseudocode
PHP:
$arrEingabe = array("foo 3","bar 5","foobar 1"); //statt dessen halt dein explodierter $_POST-Wert 
$arrEingabeAssoc = array();
foreach($arrEingabe as $eingabe)
{
$tmp = explode(" ",$eingabe);
$arrEingabeAssoc[$tmp[0]]=$tmp[1];
}
$arrEingabeSortiert = asort($arrEingabeAssoc);

Wenn ich keine totale Grütze geschrieben hab müsste danach $arrEingabeSortiert so aussehen:
array("foobar"->"1","foo"->"3","bar"->"5").

Wenn natürlich jemand 2x dasselbe Fach eingibt wird nur das letzte Vorkommen gespeichert. Tja, kein Mitleid...
 
Hi,

Leute, ich will echt kein Spielverderber sein, aber es ist SEINE Hausaufgabe. Der Lerneffekt, wenn ihr ihm alles vorkaut geht gegen Null - ausßerdem gibt es hier auf dem Forum eigentlich einen klaren Codex, was Hausaufgaben betrifft. Er sollte sich angewöhnen, dass man beim Programmieren suchen und lesen muss und nicht immer alles als Snippet im Internet findet.

VG,
Mad
 
habe es dank der anregungen hinbekommen :)
danke
 
Zurück
Oben