Ich möchte für meine Web- Anwendung einen String, welcher über ein Formular Feld eingegeben wird (Mehrzeilig) in einen Array umwandeln um ihn zu bearbeiten.
Der Input ist wie folgt Aufgebaut:
Flasche Sumpfgas für 32 Gold kaufen - anschauen
Hasenfell für 7 Gold kaufen - anschauen
Silberfuchsfell für 14 Gold kaufen - anschauen
Steinhuhn-Ei für 9 Gold kaufen - anschauen
Wie kann ich das nun so auftrennen das mein Array wie folgt aussehen würde:
Nun wäre erstmal notwendig zu prüfen, wann genau das Item aus einem oder zwei Wörtern besteht - etwa indem du prüfst ob string[2] bereits eine zahl ist, oder eben erst string[3] oder welcher String „für“ entspricht. Das letztere ist eine einfache if-else-Prüfung. Danach kannst du nötigenfalls string[0] und string[1] wieder zusammenführen, falls das Item aus mehreren Begriffen besteht.
$item = string[0]." ".string[1];
Nun weißt du ja bereits, dass 2 Strings nach dem letzten Wort des Item selbst der Wert steht - also nutzen wir das gleich aus und nehmen es direkt in unser Zielarray auf. Der Übersichtlichkeit halber nenn ich es hier um:
$wert = string[3];
Das bringt uns zum Ziel:
array($item,$wert)
Wenn du nun allerdings mehrere Items direkt abfragen möchtest, solltest du den String in mehreren Schritten zerlegen. Bspw anhand von „anschauen“, was ja scheinbar immer der letzte Begriff einer Zeile ist.
wäre hier imho genau der richtige Weg. Damit zerlegst du ja quasi den großen String schonmal in ggf. mehrere kleine. Dann lässt du die oben skizzierte Mühle durch laufen und erhälst so genau die gesuchten Elemente, die du dann zu einem Array zusammensetzen kannst.
Irgendwie will das bei mir nicht so recht.
Habe ich da irgend einen Fehler ?
<?php
echo 'Kopiere einfach die übersicht eines Reiters ins Formularfeld <br />';
?>
<?php
if ($anzeigen)
{
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<textarea name="eingabe" cols="50" rows="50"></textarea>
<br />
<input type="submit" name="submit" value="Errechnen" />
</form>
<?php
}
?>
<?php
if (isset ($_POST['submit']))
{
$eingabe = $_POST['eingabe'];
if (empty($eingabe))
{
echo 'Du musst erstmal etwas einfügen, dass bearbeitet werden kann !<br />';
$anzeigen = true;
}
if ((!empty($eingabe)))
{
echo'<br /> Er war hier'; // Umzusehen ob er in den Teilspringt
$anzeigen = false;
// Bearbeitung
$eingabe = $_POST['eingabe'];
$eingabe = explode("anschauen", $string); // Der Eingabewert (String) wird in einen Array verwandelt, er trennt nach jedem "anschauen"
$string = explode(" ", $hilfsstring); // Die großen Strings (immer bis anschauen) werden nun in mehrer kleine Getrennt, nach jedem Leerzeichen
//
// Prüfe ob das Item aus 2 Wörtern besteht
// Test Ausgabe
$arraylaenge = count ($hilfsstring);// Für Später
for($i=0; $i < count ($hilfsstring); $i++)
{
echo $hilfsstring[$i]."<br />";
}
for($u=0; $i < count ($string); $i++)
{
echo $string[$u]."<br />";
}
}
}
?>
Setzt die Variable „hilfsstring“ als Array, indem $eingabe anhand von " " zerlegt wird.
Du müsstest überprüfen wie viele Arrays daraus erzeugt werden - eben wie viele Elemente der Nutzer vorher in das Feld eingegeben hat. Daraus ergibt sich dann, dass du insgesamt für jede Eingabe einen „hilfsstring“ erstellen musst.
entsrpicht bspw. dem Array (foo 5,bar 5,baz 5) und daraus resultierend am Ende 3 verschiedene „Hilfsstrings“.
Hier wäre bspw. möglich erst die Anzahl der nötigen Hilfsstrings (im Bsp 3 Stück) zu ermitteln, und dann eine for-Schleife zu nutzen um die Strings zu erzeugen.
Also mein Code sieht für den Teilbereich nun so aus :
if ((!empty($eingabe)))
{
echo'<br /> Er war hier';
$anzeigen = false;
// Bearbeitung
$eingabe = $_POST['eingabe'];
// Verarbeitung der Eingabe zu einem brauchbaren Array
$eingabe = explode("anschauen", $string); // Der Eingabewert (String) wird in einen Array verwandelt, er trennt nach jedem "anschauen"
$arraylaenge = count ($eingabe);
echo'<br /> Es gibt '.$arraylaenge.'Strings <br />';
$hilfsstring = explode(" ", $eingabe[$arraylaenge]); // Die großen Strings (immer bis anschauen) werden nun in mehrer kleine Getrennt, nach jedem Leerzeichen
//
// Prüfe ob das Item aus 2 Wörtern besteht
// Test Ausgabe
$arraylaenge = count ($hilfsstring);// Für Später
for($i=0; $i < count ($hilfsstring); $i++)
{
echo $hilfsstring[$i]."<br />";
}
for($u=0; $u < count ($eingabe); $i++)
{
echo $eingabe[$u]."<br />";
}
}
}
Mein Input sah so aus:
Hasenfell für 11 Gold kaufen - anschauen
Hasenfell für 11 Gold kaufen - anschauen
Silberfuchsfell für 17 Gold kaufen - anschauen
Staubschleifer-Ei für 8 Gold kaufen - anschauen
Ergebnis war wohl eine endlos Schleife, die aber nichts ausgegeben hat.
Und einen Array Länge von 1 … Hab ich da irgendwas falsch gemacht, für mich sieht das richtig aus
Zumindest der zähl Teil mit der Ausgabe, dass andere hab ich nicht mehr angepasst.
$arraylaenge = count ($hilfsstring);// Für Später[/quote]
Was soll er denn damit genau machen? Du setzt die Variable hier 2x mit unterschiedlichen Werten. Das überschreibt sich natürlich dann… Funktioniert erstere Ausgabe denn?
Das war nicht so geplant, hab es gleich mal korrigiert. Allerdings selber Effekt immer noch eine “endlos schleife” der Browser läd. Und immer noch 1 String
Ich will damit die Anzahl der Array Elemente zählen, also seine länge.