String in einen Array umwandeln

Hallo liebe Leute,

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:

"Flasche Sumpfgas","32","Hasenfell","7","Silberfuchsfell","14","Steinhuhn-Ei","9" 

Hoffe jemand kann mir da weiterhelfen

Liebe Grüße Templum

Hi,

kann man sich das Formular mal live anschauen?

Ist oben.
So soll das Formular aussehen.

http://freewarapp.bplaced.net/index.php

So sieht der Input dann “live” aus

Nun, du müsstest dazu den sTring komplett zerlegen und unterschiedlich prüfen lassen:

Anhand der Leerzeichen müsstest du den String zerlegen können: explode(" ", $string);

Nun hast du also zunächst ein Array, das so aussieht:

$string[0] Flasche $string[1] Sumpfgas $string[2] für $string[3] 32 $string[4] Gold $string[5] kaufen $string[6] - $string[7] anschauen

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.

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:

Das bringt uns zum Ziel:

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.

Danke dir schon einmal für deine tolle und vor allem unerwartet schnelle Hilfe.

Kann ich explode(" ", $string); so benutzen das ich sage explode(“anschauen”,$string); ?
oder sollte ich das lieber mit einer If abfrage klären ?

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 &uuml;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&uuml;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 />";
					}
					
			}
			
			
		}
		?>







Hier liegt scheinbar das Problem. Du “explodest” erst $string (bzw. bei dir sollte das $eingabe oder eben $_POST[‘feldname’] sein)

Daraus bekommst du ein array - wie bei dir oben wird daraus:
$eingabe[0] = 1. Teilstring
$eingabe[1] = 2. Teilstring

Also müsstest du jetzt im zweiten Schritt

zu

umwandeln, je nachdem wie viele Hilfsstrings vorkommen.

Achso okay, dann hatte ich das falsch verstanden. Dachte das der hintere Teil angibt in welche Variable nun der neue Array ist. Die Zahl bei

–> $hilfsstring = explode(" ", $eingabe[zahl]);

Gibt sie an welches “Register” also [0] oder [1] z.B. oder wie viel Insgesamt davon betroffen sind ? Verstehe das grad nicht ganz

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.

[quote]foo 5 anzeigen bar 5 anzeigen baz 5 anzeigen[/quote]
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.

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 :susp:
Zumindest der zähl Teil mit der Ausgabe, dass andere hab ich nicht mehr angepasst.

ps. Kannst das gerne mal Live ansehen, habe es hochgeladen http://freewarapp.bplaced.net/

[quote]$arraylaenge = count ($eingabe);

$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.