PHP-Funktion „bcmod”

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
wksys
Mitglied
Beiträge: 28
Registriert: 17.08.2003 13:18
Wohnort: Bad Mergentheim

PHP-Funktion „bcmod”

Beitrag von wksys »

Frage: wie geht man mit der PHP-Funktion „bcmod” um ?

Ich weiß, daß daß die Funktion „bcmod” nur dann funktioniert, wenn auch die entsprechenden Elemente auf dem Server installiert sind.
Ruft man auf meinem Server „phpinfo()” auf, so wird angezeigt, daß die mathematischen Funktionen installiert sind: es heißt dort u.a.:

„PHP Version 4.1.1” (führe ich an, weil die Version evtl. von Bedeutung ist)
und in der Sektion „bcmath” steht:
„BCMath support = enabled”

Es sollte also eigentlich funktionieren ...

Ich möchte etwas in PHP programmiern, was in Abhängigkeit von der „Rest-Funktion” funktioniert.
(Es geht darum, eine Datumsfunktion zu programmieren, welche von einem Schaltjahr abhängig ist).

Daher dachte ich, daß man folgendes einrichten kann:

Zuerst hole ich mir das Serverdatum, und löse es auf:

$datum = getdate(time());
$year = $datum[year];

Dann möchte ich den Restwert haben, um festzustellen, ob es ein Schaltjahr ist:

$a = bcmod($year,4);

und das Ergebnis sollte eine Zahl zwischen 0 und 3 sein, je nach Jahreszahl.

Rufe ich dann die Variable $a auf, so erscheint immer eine „Null”.

echo $a;
(Resultat: 0)

Natürlich ist dann auch die Weiterverarbeitung von $a unsinnig, denn

$Februar = "28";
if ( $a = '0' ) $Februar = "29";

ergibt bei $Februar immer 29 als Resultat, da $a ja (immer ?) gleich Null ist.

Witzigerweise ergibt der Befehl

echo bcmod($year);

das richtige Ergebnis zwischen 0 und 3, je nach Jahreszahl.
Nur: man kann mit dem Resultat von „echo” nicht weiterarbeiten, es wird ja nicht einer Variablen zugeordnet.

Da ich die Funktion unbedingt brauche, habe ich ein „workaround” programmiert:

$Februar = 29
$datum = getdate(time());
$year = $datum[year];
$x = $year/4;
$y = floor($x);
$z = $x - $y;
if ( $z > '0' ) $Februar = 28;

Das funktioniert zwar, ist aber doch ein wenig umständlich, und ich frage mich, wozu es die Funktion „bcmod” eigentlich gibt.

Weiß jemand, wie man's richtig macht ?
Sehe ich 'mal wieder den Wald vor lauter Bäumen nicht ?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: PHP-Funktion „bcmod”

Beitrag von Pyramide »

wksys hat geschrieben:if ( $a = '0' )
Da liegt der Fehler: mit = weist man Werte zu, mit == vergleicht man.

PS: Modulo kann man auch ohne die bc*-Funktionen nutzen: http://de.php.net/manual/de/language.op ... hmetic.php
wksys
Mitglied
Beiträge: 28
Registriert: 17.08.2003 13:18
Wohnort: Bad Mergentheim

Beitrag von wksys »

Zuerst einmal herzlichen Dank für Deine Antwort.

Aber:
Es kann nicht am Vergleichsoperator liegen.
In meinem Testprogramm mit der Funktion „bcmod” habe ich den Vergleichsoperator korrekt mit zwei Gleichheitszeichen angegeben, also mit „==”. (in meiner Forenanfrage hab' ich es freihändig geschrieben, und daher das doppelte Gleichheitszeichen schlichtweg vergessen).

Es funktioniert trotzdem nicht.

Außerdem:

wenn ich mir das Datum vom Server hole, die Jahreszahl extrahiere, diese einer Variablen zuweise und damit weiterrechnen will, so findet gar keine Vergleichsoperation statt.

Also:

$datum = getdate(time());
$year = $datum[year];
$a = bcmod($year);
echo $a;

so hat keine Vergleichsoperation stattgefunden.
Trotzdem ergibt „echo $a” immer das Ergebnis „0”, egal, wie groß der Restwert ist.
Es kann also nicht am „doppeltem” Gleichheitszeichen liegen.

Was also könnte mein Fehler sein ?
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Morgen.

Mal ne Frage wegen dem Schaltjahr. Warum nimmst Du nicht die PHP-Funktion dafür?

Code: Alles auswählen

date(,$myDate,"I")
Gibt 1 zurück, wenn in $myDate ein Schaltjahr ist.

Grüße
Dennis
wksys
Mitglied
Beiträge: 28
Registriert: 17.08.2003 13:18
Wohnort: Bad Mergentheim

Beitrag von wksys »

Dennis Böge hat geschrieben:Warum nimmst Du nicht die PHP-Funktion dafür?
Weil ich es bei den vielen date-Funktionen übersehen habe.
Gruß
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

wksys hat geschrieben:$a = bcmod($year);
Da fehlt der zweite Parameter :roll:
wksys
Mitglied
Beiträge: 28
Registriert: 17.08.2003 13:18
Wohnort: Bad Mergentheim

Beitrag von wksys »

Nein, da fehlt kein Parameter. In meiner ersten message (siehe ganz oben) steht:

Code: Alles auswählen

$a = bcmod($year,4);
echo $a;
und das führt nicht zu einem gewünschtem Resultat.

Gebe ich allerdings

Code: Alles auswählen

echo bcmod($year,4);
so erhält man das Resultat.

Die Frage ist also, wieso „echo” ein richtiges Resultat aufweist, die Zuweisung zu einer Variablen dagegen nicht.
Ich weiß also immer noch nicht, wo mein Fehler liegt.
Antworten

Zurück zu „Coding & Technik“