• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

auf integer prüfen

F

FoXMorayn

Guest
hallo forum,

ich möchte gerne eine variable auf integer prüfen. 32 und 64bit sollen untersützt werden. die zahl stammt aus einem formular und ist daher erstmal ein string. nun caste ich erst int dann wieder string und vergleiche den uhrsprungswert mit dem ergebnis, welches nun defintiv im integer bereich, aber vom typ string ist. ein vergleich von 0 vom typ int mit einem string würde immer 1 ergeben.

geht das einfacher?

PHP:
<?php
//$value = "99999999999999999999999";
$value = "string";
echo $intval = (string)(int)$value;
echo $value;
if($intval == $value)
{
    echo "ok";
}
?>


edit:
da ich schon einmal dabei bin: float inkl. 0,10 == 0,1 usw.. da ein float cast die null am ende entfernt
 
Zuletzt bearbeitet von einem Moderator:
int ist ein zahlenbereich. dieser ändert sich je nach system (32/64bit). auf einem 32bit system sollte signed (also inkl negativer zahlen) maximal 2147483647 akzeptiert werden. am liebsten hätte ich unsignet int, aber das gibt es leider nicht in php. mich wundert es, dass es dafür noch keine funktion gibt. ich dachte php hätte sich mittlerweile zu datentypen durchgerungen.


dies erzeugt eine ausgabe von 1.
PHP:
$value = "99999999999999999999999";echo ctype_digit($value);
 
ja sicher^^ aber nicht gewünscht. les nochmal nach, was das ziel ist.

ein problem wäre, wenn diese zahl akzeptiert würde und als integer gespeichert werden würde. es wird entweder nichts gespeichert, oder ein falscher wert.
 
Du willst PHP 64bit beibringen? :) Das wird ein Spaß kann ich dir sagen, haha :D

Das letzte mal als wir das gebraucht haben, war als wir Unix-Systemen Microsoft's Authentifizierungsmethode für unser SSO beibringen wollten. Dafür musste man 64bit Inhalte über diverse Komplexe Verfahren weiterleiten und Php konnte das zu dem Zeitpunkt nicht einfach so.. ( Seit letzem Informationsstand, wüsste ich auch nicht das es es jetzt können sollte )
Daher mussten wir uns auch Stundenlang einen Kopf drum machen wie wir das Problem lösen.

Es ist zwar schon länger her, aber ich soweit ich weiß haben wir Bitmasks verwendet, welche wir nochmal splitten mussten, je nachdem, ob die erwünschte Zahl nun erreicht ist oder nicht.


Die PHP-64bit Lib steht übrigens zum Verkauf an Falls ich das Interesse von jemanden geweckt habe, können wir das gerne per privater Nachricht klären. :)

Ansonsten viel Erfolg in der Umsetzung, vllt. fällt dir etwas ein oder jemand anderes kennt ein anderes existierendes, funktionierendes Exemplar.

Gruß
 
ok, 64bit hat sich fürs erste erledigt ;) der gedanke war, dass ein cast auf 64bit automatisch größere int unterstützen würde. wär schön wenn die software mit einem 64bit php auch größere zahlen unterstützen würde. einen regex würde ich gerne vermeiden.
 
Hallo,

solange Du nicht Windows verwendest, sollte das kein Problem sein. Auf meinem Mac unterstützt PHP 64bit Integer. Einfach zu testen mit "php -r 'echo PHP_INT_MAX;'" Ergebnis (9223372036854775807). Bei anderen Unix/Linux (X86_64 Kernel) Systemen sollte das auch kein Problem sein. Andernfalls vielleicht BCMath oder so verwenden.

Viele Grüße
/martin

ok, 64bit hat sich fürs erste erledigt ;) der gedanke war, dass ein cast auf 64bit automatisch größere int unterstützen würde. wär schön wenn die software mit einem 64bit php auch größere zahlen unterstützen würde. einen regex würde ich gerne vermeiden.
 
kannst du den cast testen? echo (int)"9223372036854775808";
wenn möglich mit php version posten :)
 
Zuletzt bearbeitet von einem Moderator:
Na Klar ;)

php -r 'echo (int) "9223372036854775807".PHP_EOL;'
9223372036854775807

PHP Version ist 5.3.8

php --version
PHP 5.3.8 (cli) (built: Dec 5 2011 21:24:09)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

Edit:

gerade noch zusätzlich auf der Ubuntu Server 64Bit Standardinstallation getestet:

martin@ubuntu:~$ php -r 'echo (int) PHP_INT_MAX.PHP_EOL;'
9223372036854775807

martin@ubuntu:~$ php -v
PHP 5.4.6-1ubuntu1 (cli) (built: Aug 22 2012 21:13:52)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies




Viele Grüße
/martin
 
Zuletzt bearbeitet:
Zurück
Oben