Rechnen, Anfänger frage grösser, kleiner oder gleich.

Danke viel mals für die erklärung, datte gestern genau so ein problem.

hab ein arry in der xlm datei mit zb.10 werten, aber leider nicht mit einem komma getrennt.

jetzt wolte ich diese mit einem komma trennen. str_replace

Ergebniss:
aus: $SimpleXML_loaded_File->wswin->wind_60value
wird: $SimpleXML,loaded,File->wswin->wind_60value
:(

Habs dann doch noch Richtig gemacht.
PHP:
$wind2 =  str_replace(" ", ",", $SimpleXML_loaded_File->wswin->wind_60value);
Mir ist nun einigermassen klar wo das problem wahr.

Re: Teste mal diesen code:

Zahl 1 ist float(1.234) Zahl 2 ist float(0)

float=eine Anordnung von Text- und anderen Elementen.

Dass man mit acb nicht rechnen kann leuchtet mir ein.
Ich verstehe den sinn des codes nicht. für welche verwendung brauchts ("echo" float(1.234))
ah. aus erier zeichenfolge mach ich eine zahl. vermute ich. 5 zeichen ergeben 1 zahl, 5 zeichen mit alphabetisch inhalt ergibt immer zahl 0. vermute ich.

besser ich mach morgen weiter. binn grade müder, da mache ich mehr fehler als sonst....

Danke für die Erklärung. 1UP
 
Der Sinn des Codes sollte sein, dir zu veranschaulichen, was mit Zahl-Werten passiert, die eigentlich Teil einer Zeichenkette sind, wenn man sie dazu zwingt, Zahlwerte und nicht Ziffern in einem String zu sein.

Schau dir mal die ASCII-Tabelle an: http://www.electronicdeveloper.de/Images/ASCII-Tabelle1.PNG

Dort siehst du die erstens Steuerzeichen (alles bis Hex 0x1f => ganz linker Teil). Dann beginnen ab 0x20 die Zeichen, die man wirklich lesen also in eine Zeichenkette unterbringen kann. Wie du siehst, sind 0x30 bis 0x39 die Ziffern 1 bis 9. Das sind natürlich nicht die Zahlen, mit denen man rechnet, sondern ihre Repräsentation innerhalb von Zeichenketten. Angenommen, du hast eine Zeichenkette

$a = "74378";

Also eigentlich steht da im Speicher 0x37, 0x34, 0x33, 0x37 und 0x38. Wenn du in PHP diese Variable zum Rechnen verwendest, also den Wert dazu zwingst, keine Zeichenfolge sondern tatsächlich eine Zahl zu sein, wird PHP von jeder Ziffer den Wert 0x30 abziehen, um damit die tatsächliche Zahl zu erhalten. Genaugenommen wird PHP auf die Zeichenfolge die Funktion strtol() anwenden.

Das macht PHP deswegen, weil es eine sog. dynamische Sprache ist. Dynamisch bezieht sich dabei auf die Art und Weise, wie Variablen bzw. deren Werte behandelt werden.

Streng genommen ist das Ergebnis dieses Beispiel-Codes die Ausgabe "falsch":

PHP:
$a = "12347";

if($a == 12347)
{
  echo "wahr";
}
else
{
  echo "falsch";
}

In $a stehen die Ziffern als ASCII-Wert und der Vergleich geht gegen eine Ganzzahl. Aber PHP erkennt, dass es sich um einen Vergleich zwischen Ganzzahlen handeln muss, und wandelt automatisch den Wert von $a in eine Ganzzahl um (mit der Funktion strtol). Damit wird der Vergleich zu "wahr". Diesen Vorgang nennt man "dynamische (Daten-)Typ-Umwandlung".
 
Aber PHP erkennt, dass es sich um einen Vergleich zwischen Ganzzahlen handeln muss, und wandelt automatisch den Wert von $a in eine Ganzzahl

Aha. Ist ja genjal wen php das selber nachvolzihen kann was man ereichen möchte


ASCII Scheint ein wesentlicheer betsandsteil von php zu sein (A=0x41) also unterstüzt php mehrere "sprachen".
 
Aha. Ist ja genjal wen php das selber nachvolzihen kann was man ereichen möchte

Das ist nicht nur bei PHP so. Alle dynamisch typisierten Sprachen machen das so, unter anderem auch JavaScript.

ASCII Scheint ein wesentlicheer betsandsteil von php zu sein (A=0x41) also unterstüzt php mehrere "sprachen".

Wenn du Wikipedia gefragt hättest, was ASCII ist, käme dir in den Sinn, dass überhaupt nichts (oder nur am Rande) mit Programmiersprachen zu tun hat. Es is der amerikanische Standard, welches Zeichen welchen Wert hat. Damit soll der Informationsaustausch standardisiert werden.
 
Noch als kleine Ergänzung zu saftmeisters Erläuterung bzgl. ASCII:

ASCII ist nur ein Standard zum Kodieren von Buchstaben. Sowas nennt man Encoding. Heutzutage nutzt man UTF-8 (oder 16/32) als Encoding. Dessen Zeichenraum (=Charsetz) heißt Unicode und umfasst sehr viele Zeichen!
ASCII ist eine Teilmenge von UTF-8, sprich jede gültige ASCII-Datei ist auch eine gültige UTF-8-Datei.

Aha. Ist ja genjal wen php das selber nachvolzihen kann was man ereichen möchte
Du wirst noch früh genug merken, dass sowas nicht genial ist ;)
Schau dir z. B. die folgenden Links an:
- http://stackoverflow.com/q/15813490/603003
- http://stackoverflow.com/a/12892879/603003

In dieser Hinsicht gefallen mir stark typisierte Programmiersprachen (C++, Java) viel besser.
 
Wobei noch anzumerken wäre, dass der ==-Operator genauso konzipiert war. Und das die ersten Zeichen eines Strings Zahlen sein können und dann auch gültige Zahlen raus kommen, ist auch schon immer so gewesen. Ich würde das als Spracheigenschaft hinnehmen und einfach damit klar kommen. Ist halt dem Einsatz von strtol() geschuldet.

In Java kann man Objekte (z.B. Integer oder Double) auch nicht einfach mittels ==-Operator auf Gleichheit prüfen, ein Irrtum, dem gerade viele Anfänger immer wieder unterliegen ;-) Ein Java-Experte hat mir mal glaubhaft dargelegt, dass Objekte immer mit der equals()-Funktion geprüft werden sollen, da sonst Referenz-Id geprüft werden und nicht die dahinter liegenden Werte. Und in C++ dürfte das auch nicht anders sein.
 
Ich wollte eigentlich darauf hinaus, das streng typisierte Programmiersprachen diesbezüglich stringender sind aber auch nicht vor solchen Problemen schützen. Sonst würde der Java-Compiler die Prüfung von zwei Objekte mittels ==-Operator zumindest als Warning ausgeben. Dann wäre es zur Compile-Zeit gar nicht zu diesem Fehler hier gekommen:

Java:
package vartest;

public class Vartest
{

  public static void main(String[] args)
  {
  Double a = 1.234;

  Double b = Double.parseDouble("1.234");

  System.out.println(a == b ? "true" : "false");
  }

}

Ausgabe: "false"

Aber wir werden OT ;-)
 
Ich wahr in der schule eher schlecht. Habe nie englisch untericht gehabt. Ich wollte schon öfters eine abend schule für php besuchen. Ich bezweifle das ich da mithalten könnte..:(
Ich kann kein 10 finger system, hab nicht mal ne tastatur. Schreibe seit 4jahren mit der maus und bildschirm tastatur.
Da könnte ich in der schule niemals mithalten. Bücher über php sind für mich nicht immer verständlich geschrieben.

Ich binn gehrnter koch:cool:

Danke für den "untericht" weiss es sehr zu schätzen, sorry wenn ichs nicht gleich kapiere.

In $a stehen die Ziffern als ASCII-Wert und der Vergleich geht gegen eine Ganzzahl

Also farblich sehe ich den unterschied zwischen der Ganzzahl und denn Ziffern als ASCII-Wert.

ASCII ist ein standart wie meter oder zoll. (A=0x41) - aber wer schreibt anstat A den wert 0x41 in den quellcode. das wähle ultra unübersichtlich.

Wenn du Wikipedia gefragt hättest, was ASCII ist, käme dir in den Sinn, dass überhaupt nichts (oder nur am Rande) mit Programmiersprachen zu tun hat. Es is der amerikanische Standard, welches Zeichen welchen Wert hat. Damit soll der Informationsaustausch standardisiert werden.

Aber ein A ist und bleibt ein A. Wozu ein kodierter standart? ein pc arbeitet doch mit 0 und 1. A ist Binär 01000001.
Ich tu mir schwer das zu werstehen.
Sowas nennt man Encoding. Heutzutage nutzt man UTF-8
Das kenne ich, respektive, wenn das auf meiner webseite fehlt, hab ich probleme mit üöä. Ärgerlich :mad:
----------------
Ich brauche php zum xml auslesen für wetter daten, und zur anzeige auf meiner webseite.

Nach den motto, wo ein wille ist, ist auch ein weg. leider oft 3 schritte vor wärz und 4 zurück :eek:.

Ich möchte nicht das es funktioniert, ich möchte verstehen wies und warums funktioniert.

offt denke ich, dass ich ne lössung für mein problem habe, die ich auch verstehe. Wass meistens leider nicht so ist.
 
Ja, wenn es an den Grundlagen fehlt, ist es sicher nicht leicht nachzuvollziehen.

Das mit dem ASCII oder kleiner Exkurs ins Speicher-Management. Fangen wir mal ganz am Anfang an.

Nehmen wir diesen Code:

PHP:
<?php
// Eine Variablen-Zuweisung - aber eigentlich passiert da noch viel mehr...
$a = "Hallo gix";
// Ausgabe des Wertes, der in der Variable steht
echo $a;

Der PHP-Interpreter läuft los und analysiert den Quellcode. Er stellt fest, dass in Zeile 3 eine Variable definiert wurde. Jetzt fordert er für diese Variable Speicher vom Betriebssystem an. Wenn das erfolgreich war (da kann es nämlich auch schon zu einem Fehler kommen => Stichwort Out-of-memory) wird er den Wert, der hinter dem Gleichzeichen an den angeforderten Speicher schreiben - denn das Gleichzeichen ist der Zuweisungsoperator.

Du hast mit dem Code also dafür gesorgt, dass Speicher angefordert wurde und etwas in diesen angeforderten Speicher geschrieben wurde. Das steht dort aber nicht in Form eines Buchstabens sondern - wie du selbst schon geschrieben hast - in Form von 0en und 1en. In diesem Fall steht im ersten Byte des angefordeten Speichers der Binärwert 01001000, was dem Hexadezimal-Wert 0x48 oder dem Dezimal-Wert 72 entspricht - und wie es der "Zufall" will, dem Buchstaben "H" aus dem ASCII-Bereich. Im zweiten Byte des angeforderten Speicher steht dann halt 01100001, was den Hexwert 0x61 bzw. der Dezimalzahl 97 entspricht und den Buchstaben "a" aus der ASCII-Tabelle repräsentiert. Und so geht das weiter, bis alle Buchstaben im Speicher vorliegen.

Das schreibt natürlich keiner so in seinen Quellcode, aber man könnte es ;-)

In ASCII wurde der Standard festgelegt, nach dem alle Systeme arbeiten (sollen), damit ein reibungsloser Informationsaustausch zwischen Systemen stattfinden kann. Jedes Beitriebssystem, was du heute in freier Wildbahn findest, arbeitet nach diesem Prinzip, sonst wäre es eine Insellösung, mit der keiner was anfangen will und kann. Das bedeutet, wenn eine 01001000 im Speicher steht, soll das Betriebssystem dafür sorgen, das auf dem Ausgabe-Gerät der Buchstabe "H" erscheint, was auch immer das Ausgabegerät sein mag (TFT-Bildschirm, LED-Anzeige oder auch ein Braille-Terminal für Blinde).
 
Zurück