kostenloser Webspace werbefrei: lima-city


PHP beide Werte eines arrays auslesen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich bastel mir gerade mithilfe eines array eine zufällige Matheaufgabe.

    /// Zufällige Matheaufgabe
    														$zahlen = array(0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six');
    														$zufall = rand(0, 3);
    														$zufall2 = rand(0, 3);
    														echo $zahlen[$zufall] . " + " . $zahlen[$zufall2]; 
    														
    														?>


    Jetzt möchte ich in einer variabel $ergebnis den wert von $zufall & $zufall2 miteinander entweder addieren,dividieren,multiplizieren oder subtraieren.

    Doch wie kann ich im array die Zwei bekommen statt two?


    LG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    Benutz doch einfach direkt die $zufall und $zufall2 Variablen, die haben die entsprechenden Werte ja bereits drin.

    mfg T
  4. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Falsch diese haben das Wort drin und nicht die Zahl.


    LG
  5. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Falsch diese haben das Wort drin und nicht die Zahl.


    LG


    Nein, die haben die Zahlenwerte gespeichert. Die Worte bekommst Du doch erst, indem Du in deinem Array da mittels der Variablen das dazugehörige Wertepaar aufrufst.

    Is vielleicht besser, wenn Du eher nach der Grundfunktionalität fragst wenn Du Dir nicht sicher bist anstatt richtige Antworten als Falsch zu bezeichnen.
  6. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Sorry mein Fehler. Beim schnellen hingucken hab ich da die Variabeln verwechselt.
    Nun sieht der Code so aus:
    $zahlen = array(0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six');
    														$zufall = rand(0, 3);
    														$zufall2 = rand(0, 3);
    														$zufallzeichen = array('+', '-');
    														$zufallzeichen = $zufallzeichen[rand(0, 1)];
    														$ergebnis = $zufall . $zufallzeichen . $zufall2;
    														echo $zahlen[$zufall] . $zufallzeichen . $zahlen[$zufall2] . " = " . $ergebnis;



    Allerdings rechnet er nicht das ergebnis zusammen, sondern spuckt die Formel als Zahl raus.

    Beispiel: three-one = 3-1

    LG
  7. marvinkleinmusic schrieb:
    Sorry mein Fehler. Beim schnellen hingucken hab ich da die Variabeln verwechselt.
    Nun sieht der Code so aus:
    $zahlen = array(0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six');
    														$zufall = rand(0, 3);
    														$zufall2 = rand(0, 3);
    														$zufallzeichen = array('+', '-');
    														$zufallzeichen = $zufallzeichen[rand(0, 1)];
    														$ergebnis = $zufall . $zufallzeichen . $zufall2;
    														echo $zahlen[$zufall] . $zufallzeichen . $zahlen[$zufall2] . " = " . $ergebnis;



    Allerdings rechnet er nicht das ergebnis zusammen, sondern spuckt die Formel als Zahl raus.

    Beispiel: three-one = 3-1

    LG

    Wieso sollte er es auch zusammen rechnen, wenn du ihm sagst, dass er Strings verknüpfen soll?
  8. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    Was tchab in seiner unglaublichen Geduld Unwissenden gegenüber ausdrücken will :wall: :

    Das php identifiziert das "+" und "-" nicht mehr als zu verwendete Rechenzeichen, sondern als Zeichenstrings. Daher mußt Du das ein bissl anders machen, zB mit einer If-Schleife

    $zufallzeichen_array = array('+', '-');
    $zufallzeichen = rand(0, 1);

    if $zufallzeichen == 0 {
    $ergebnis = $zufall + $zufall2;
    }
    elseif $zufallzeichen == 1 {
    $ergebnis = $zufall - $zufall2;
    }

    echo = $zufall . $zufallzeichen_array[$zufallzeichen ] . $zufall2 . "=" . $ergebnis;

    (Nur schematisch, mußte noch richtig zurechtbasteln)
  9. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hmm irgendwie rechnet er nur - wenn oben eine 1 steht und + wenn oben eine 0 steht xD

    $zufallzeichen = $zufallzeichen[rand(0, 1)];
    														if($zufallzeichen == 0) {
    														$ergebnis = $zufall + $zufall2;
    														}
    														else{
    														$ergebnis = $zufall - $zufall2;
    														}
  10. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Hmm irgendwie rechnet er nur - wenn oben eine 1 steht und + wenn oben eine 0 steht xD

    $zufallzeichen = $zufallzeichen[rand(0, 1)];
    														if($zufallzeichen == 0) {
    														$ergebnis = $zufall + $zufall2;
    														}
    														else{
    														$ergebnis = $zufall - $zufall2;
    														}


    Du weist dem Zufallseichen da "+" oder "-" zu und guckst dann nach 1 oder 0. So wie Du es hier hast mußt Du in der if-Schleife auf "+" oder "-" prüfen.
  11. m******e

    Oder mit switch arbeiten:
    $zahlen = array(0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six');
    $zufall = rand(0, 6); $zufall2 = rand(0, 6);
    $zufallzeichen = array('+', '-', '*', ':'); $zufallzeichen = $zufallzeichen[array_rand($zufallzeichen)];
     switch ($zufallzeichen) {
     case "+":$ergebnis = $zufall + $zufall2;break;
     case "-":$ergebnis = $zufall - $zufall2;break;
     case "*":$ergebnis = $zufall * $zufall2;break;
     case ":":$ergebnis = $zufall / $zufall2;break;}
    if(!$ergebnis)$ergebnis='0';
    echo $zahlen[$zufall] . ' ' . $zufallzeichen .  ' ' . $zahlen[$zufall2] . " = " . $ergebnis;

    > Beispiel <

    Beitrag zuletzt geändert: 20.6.2014 14:38:09 von menschle
  12. noch einfacher ist es, was hier aber nciht geht, aber wenn du dir lokal einen Webserver installierst, auf dem das geht, wenn du eval($formel) verwendest. wobei ich mir nciht mal sicher bin, ob eval auf lima gesperrt ist, vor 2 Jahren hab ich mal für jemandem in einem anderen thread hier eine Lösung für einen Zinseszinsrechner geschrieben, der die Formelelemente miteinander verkettet hat und mittels eval() berechnet hat.

    Problem: das ding ist dann kaum XSS sicher zu kriegen...
  13. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    menschle schrieb:
    Oder mit switch arbeiten:
    $zahlen = array(0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six');
    $zufall = rand(0, 6); $zufall2 = rand(0, 6);
    $zufallzeichen = array('+', '-', '*', '/'); $zufallzeichen = $zufallzeichen[array_rand($zufallzeichen)];
     switch ($zufallzeichen) {
     case "+":$ergebnis = $zufall + $zufall2;break;
     case "-":$ergebnis = $zufall - $zufall2;break;
     case "*":$ergebnis = $zufall * $zufall2;break;
     case "/":$ergebnis = $zufall / $zufall2;break;}
    if(!$ergebnis)$ergebnis='0';
    echo $zahlen[$zufall] . ' ' . $zufallzeichen .  ' ' . $zahlen[$zufall2] . " = " . $ergebnis;

    > Beispiel <


    Das funktioniert so prima! Vielen dank :) gibt es noch eine möglichkeit es so einzubauen das das Ergebnis nie kleiner als 1 sein kann? ( * & / ) können mach mehrmaligen testen wegfallen.


    LG
  14. m******e

    marvinkleinmusic schrieb:
    gibt es noch eine möglichkeit es so einzubauen das das Ergebnis nie kleiner als 1 sein kann?
    Jepp. Dazu einfach alles in eine Funktion packen, und ne Bedingung setzen:
    function rechne(){$zufallzeichen = array("+", "-", "*", ":"); $zufallzeichen = $zufallzeichen[array_rand($zufallzeichen)];
    $zahlen = array(0 => "zero", 1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", 6 => "six");
    $zufall = rand(0, 6); $zufall2 = rand(0, 6);
     switch ($zufallzeichen) {
     case "+":$ergebnis = $zufall + $zufall2;break;
     case "-":$ergebnis = $zufall - $zufall2;break;
     case "*":$ergebnis = $zufall * $zufall2;break;
     case ":":$ergebnis = $zufall / $zufall2;break;}
    if(!$ergebnis || $ergebnis < 1){rechne();}else{echo $zahlen[$zufall] . ' ' . $zufallzeichen .  ' ' . $zahlen[$zufall2] . " = " . $ergebnis;}}
    rechne();
    > Beispiel <

    Beitrag zuletzt geändert: 20.6.2014 14:38:44 von menschle
  15. und wenn man $zahlen-array etwas einfacher gestaltet, dann in der forschleife 'zero', 'one' etc. mit den zahlenwerten füllt (variablevariablen), dann ist das ding leichter zu erweitern (weniger tippen ist gut für die gelenke ;).
    zudem kommt noch ein test ob div durch zero der fall ist, dass kein error geworfen wird.
    die zweite echo zeile (unten) ist nur demo, wie man variablevariablen ($$varname) verwendet.
    und das ganze geht dann so (nach dem code von @menschle):
    function rechne() {
    	$zufallzeichen = array('+', '-', '*', '/');
    	$zufallzeichen = $zufallzeichen[array_rand($zufallzeichen)];
    	$zahlen        = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
    	$anzahl        = count($zahlen) - 1;
    	for($i = 0; $i <= $anzahl; $i++) {
    		$$zahlen[$i] = $i;
    	}
    	$zufall  = rand(0, $anzahl);
    	$zufall2 = rand(0, $anzahl);
    	if($zufallzeichen === '/' AND $$zahlen[$zufall2] === 0) {rechne();}
    	switch ($zufallzeichen) {
    		case '+': $ergebnis = $$zahlen[$zufall] + $$zahlen[$zufall2]; break;
    		case '-': $ergebnis = $$zahlen[$zufall] - $$zahlen[$zufall2]; break;
    		case '*': $ergebnis = $$zahlen[$zufall] * $$zahlen[$zufall2]; break;
    		case '/': $ergebnis = $$zahlen[$zufall] / $$zahlen[$zufall2]; break;
    	}
    	if(!$ergebnis OR $ergebnis < 1) {
    		rechne();
    	} else {
    		echo "$zahlen[$zufall] $zufallzeichen $zahlen[$zufall2] = $ergebnis<br>";
    		echo "{$$zahlen[$zufall]} $zufallzeichen {$$zahlen[$zufall2]} = $ergebnis";
    	}
    }
    rechne();
    zu sehen ist es hier.
  16. Warum das Rad neu erfinden, wenns fertige Lösungen gibt?
    http://combie.de/fragmente/formelparser/NeuerParser/
    ... oder, etwas weniger umfangreich (und weniger schön):
    http://www.php.de/php-tipps-2010/66855-mathematische-berechnung-vom-stringinhalt.html#post507927

    sonok schrieb:
    Was tchab in seiner unglaublichen Geduld Unwissenden gegenüber ausdrücken will :wall: :

    Wer im Glashaus sitzt ...


    ... Daher mußt Du das ein bissl anders machen, zB mit einer If-Schleife ...


    ... So wie Du es hier hast mußt Du in der if-Schleife auf "+" oder "-" prüfen.



    http://www.if-schleife.de/

    http://www.php.de/beitragsarchiv/46875-mythos-if-schleife.html

    Bitte verwirre Anfänger nicht mit inkorrekter Terminologie. So etwas setzt sich dann bei denen im Gedächtnis fest und erschwert das weitere Lernen nur.
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!