php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.04.2005, 14:07  
Gast
 
Beiträge: n/a
Standard switch-case macht probleme

Hallo,
ich versuche einen Rechenausdruck zu parsen und zu berechnen. Ich habe nun 2 arrays gebildet, in die ich Zahlen und Operatoren aufteile. Sobald die Schleife bei einem Operator angelangt, soll dieser verarbeitet werden. Versucht habe ich dies vorerst für + und *. Als Testeingabe gebe ich z.B.

5 + 3 * 2 6

ein. Dieser Rechenausdruck gelangt dann in dieses Script:

Code:
<?php 
  $array = explode(" ", $_POST["Rechnung"]);
  
    $zahl = array();
    $operator = array();
    $erg = real;
    $z = int;
    $o = int;
    
    $z = 0;
    $o = 0;
  
  for($i=0; $i<count($array); $i++){
    echo $array[$i];
    
    if(is_int($array[$i])){
      $zahl = array_push($zahl, $array[$i]);
      $z = $z + 1;
    }else{
  
    switch($array[$i]){
      case "+":
        $operator = array_push($operator, $array[$i]);
        if(is_int($array[$i+1])){
          $erg = $zahl[$z] + $array[$i+1];
        }else{
          echo "nix da";
        }
      break;
      case "-":
        $operator = array_push($operator, $array[$i]);
      break;
      case "*":
        $operator = array_push($operator, $array[$i]);
        if(is_int($array[$i+1])){
          $erg = $zahl[$z] * $array[$i+1];
        }else{
          echo "nix da";
        }
      break;
      case "/":
        $operator = array_push($operator, $array[$i]);
      break;
      case "(":
        $operator = array_push($operator, $array[$i]);
      break;
      case ")":
        $operator = array_push($operator, $array[$i]);
      break;
      case "sin(":
        $operator = array_push($operator, $array[$i]);
      break;
      case "cos(":
        $operator = array_push($operator, $array[$i]);
      break;
      case "tan(":
        $operator = array_push($operator, $array[$i]);
      break; 
      $o = $o + 1;
    }
    }


  }
  echo "=";  
?>
Als Ausgabe folgt dann:

Code:
 5+nix da3*
Warning: array_push() [function.array-push]: First argument should be an array in D:\Programme\Programmieren\PHP\apachefriends\xampp\htdocs\Kellerautomat.php on line 43
nix da26=
Meine Fragen:
Wieso wird "nix da" ausgegeben, wenn doch ein int vorliegt?
Wieso kommt die Fehlermeldung für line 43, obwohl das selbe in line 32 funktioniert?

----
Apache/2.0.53 (Win32) mod_ssl/2.0.53 OpenSSL/0.9.7f PHP/5.0.4
----
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.04.2005, 14:12  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Weil http://de2.php.net/array_push kein array zurückliefert, weswegen $operator nach dem ersten aufruf von array_push() schrott ist und nichts mehr draufgepusht werden kann.
__________________
mod = master of disaster
Waq ist offline  
Alt 27.04.2005, 13:42  
Gast
 
Beiträge: n/a
Standard

Mist, hat vielleicht jemand eine Lösung für das Problem? Wie mach ich denn daraus am besten einen Kellerautomaten?
MfG - knucKles
 
Alt 27.04.2005, 13:55  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Vielleicht indem Du aufhörst, den Integer, den array_push() zurückliefert, dem array zuzuweisen?
Statt
$operator = array_push($operator, $array[$i]);
besser
array_push($operator, $array[$i]);
__________________
mod = master of disaster
Waq ist offline  
Alt 27.04.2005, 15:31  
Gast
 
Beiträge: n/a
Standard

Okay, habe nun den Rat befolgt und es klappt. Besten Dank. Trotzdem habe ich aber noch das Problem, dass zwischendurch "nix da" ausgegeben wird. Schreibe ich ans Ende ein print_r($zahl), so ist dies leer... print_r($operator) gibt das richtige aus
( Array ( [0] => + [1] => * ) ). Wie kommt das?
 
Alt 27.04.2005, 15:38  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

"nix da" liegt daran, dass is_int() die PHP-internen Typen überprüft, und was Du da hast sind nunmal Strings, in denen Zahlen stehen, denn genau das liefert der Browser.
http://de3.php.net/is_numeric
__________________
mod = master of disaster
Waq ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
Switch Case oder str_replace? Timer PHP Tipps 2008 8 17.05.2008 10:15
Probleme mit Switch und Include Fishup PHP Tipps 2006 8 23.05.2006 10:45
switch case frage skaterboy PHP Tipps 2006 8 11.04.2006 14:30
switch case als for-schleife? PHP Tipps 2006 10 13.01.2006 18:32
Probleme mit switch Anweisung und Wertübergabe per URL Bruno PHP Tipps 2005-2 3 07.07.2005 17:00
Switch / Case + while krummzahn PHP Tipps 2005-2 16 05.06.2005 10:46
Switch - Case krummzahn PHP Tipps 2005 12 03.06.2005 13:28
switch case und inlcude problem PHP Tipps 2005 12 01.03.2005 09:55
Probleme mit der Verlinkung per PHP PHP Tipps 2005 13 07.02.2005 14:41
Abstatz mit MultiCell Fpdf PHP Tipps 2005 4 12.01.2005 14:09
problem mit switch und der 8 & 9 Calexico PHP Tipps 2004-2 3 30.12.2004 11:00
Switch case mit Vergleichsoperatoren PHP Tipps 2004 15 03.11.2004 16:31
Switch / Case Problem PHP Tipps 2004 9 28.10.2004 11:18
[Erledigt] switch &amp; case PHP Tipps 2004 4 26.07.2004 10:58

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
switch case array php, php case nach {, php array von case nach case, php switch case mit array, php switch in array, php switch count, switch case aus array php, probleme mit case php, case operatoren php, php switch operatoren, was macht switch php, php switch case array, wieso wird das array im switch leer?, seitch case operatoren, array in switch case

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.