PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Prüfen, zahl bzw. buchstabe in EINER VARIABLEN (http://www.selfphp.de/forum/showthread.php?t=4324)

Willy 16.05.2003 19:37:47

Prüfen, zahl bzw. buchstabe in EINER VARIABLEN
 
Hallo, wie kann ich prüfen, ob bei einer Variablen (Im format A1, oder D11, oder so) der 1. Buchstabe zwischen A-F und die Zahl zwischen 1 und 11 ist? In der Variablen ist KEIN Leerzeichen vorhanden. Geht das ? danke vielmals

willy

c4 16.05.2003 21:10:13

Klaro geht das.

Kleine Ideensammlung:
Prüfen, ob Variable eine Zahl ist (is_numeric).
- wenn ja, dann kein Buchstabe vorhanden -> Fehleingabe
- wenn nicht, dann $buchstabe=$variable[0]; (erstes Zeichen zu $buchstabe) unset($variable[0]); (erstes Zeichen entfernen) und $zahl=$variable; (Rest als Zahl betrachten)

Kannst auch mit substr() arbeiten.

Alles klarofix?

overclocker 16.05.2003 21:19:13

Ich hab jetzt ehr an ne regular expression gedacht..
PHP-Code:

$var "D11";
$search ereg("^[A-F][0-9][0|1]?$",$var);
     if(
$search){
         echo 
"Gefunden!";
     }else{
         echo 
"Nicht gefunden!";
     } 

Es wird nach in $var gesucht, ob es mit einem Großbuchstamen von A-F beginnt, mit einer Zahl von 0-9 "weitergeht" und ob an der dritten Stelle vielleicht noch eine 0 oder eine 1 vorkommt.

Also dann..

c4 16.05.2003 21:21:22

Wenn möglich, dann vermeidet man reguläre Ausdrücke. Solche Ausdrücke sind zwar fast alles, aber nicht schnell!

overclocker 16.05.2003 21:24:37

ja, das weiß ich, aber so ein kleines suchmuster wird die performance doch nicht sooo arg runterziehen oder ?

c4 16.05.2003 21:26:46

Weiß nicht. Wäre mal ein Benchmark wert: Eine Suchabfrage mit simplen Stringfunktionen und ein regulärer Ausdruck.
Ma schaun. Wenn mir mal wieder langweilig sein sollte. Heute nicht mehr...

Wie auch immer: Ich bleibe dabei - reg. Expr. nur, wenn wirklich nötig.

overclocker 16.05.2003 21:41:21

Jo.. natürlich bin ich auch nicht der Hardcore Regex User ;)
Aber hier kam mir spontan Regex ins Gedächtnis..

Ich hab nen "Benchmark" gemacht und mit Regex brauchts
ca. 0.0002 sek. (der Wert ändert sich gar nicht, egal was ich eingebe ;)).
PHP-Code:

<?php
     
function getmicrotime(){
     list(
$usec,$sec) = explode(" ",microtime());
     return ((float)
$usec + (float)$sec);
     }
     
$time_start getmicrotime();
     
//
     
$search ereg("^[A-F][0-9][0|1]?$",$var);
     if(
$search){
         echo 
"Gefunden!";
     }else{
         echo 
"Nichts gefunden!";
     }
     
//
     
$time_end getmicrotime();
     
$time_difference $time_end $time_start;
     
$time_rounded round($time_difference,4);
     echo 
"<br>";
     echo 
$time_rounded;
?>

alles auf win xp auf nem athlon 1,2 ghz und 512 mb sd-ram

Poste deinen Vorschlag und ich werd's bei mir testen ;)
Würde mich nämlich echt interessieren, ob der Unterschied groß ist.

cu

c4 16.05.2003 21:52:10

Klatsch das mal rein:
PHP-Code:

 $var='D11'$hex=array('A','B','C','D','E','F');
 if (
in_array(substr($var,0,1),$hex) && is_numeric(substr($var,1,2)))
  echo 
'Gefindet.';
 else
  echo 
'Gefindet ni.'

Solche Messungen führt man übrigens mehrere Male durch -> statistische Abweichung.


Hab mal einen alten Benchmark umgeschrieben:
PHP-Code:

<?php
set_time_limit
(0);

$var='D11'$hex=array('A','B','C','D','E','F');
$count_f=0;
for (
$i=0$i<1000$i++)
 {
  
$start=microtime();
  if (
in_array(substr($var,0,1),$hex) && is_numeric(substr($var,1,2)))
   echo 
'Gefindet.<br>';
  else
   echo 
'Gefindet ni.<br>';
  
$count_f+=microtime()-$start;
 }

$count_w=0;
for (
$i=0$i<1000$i++)
 {
  
$start=microtime();
  
$search ereg("^[A-F][0-9][0|1]?$",$var);
  if(
$search)
   echo 
"Gefunden!<br>";
  else
   echo 
"Nichts gefunden!<br>";
  
$count_w+=microtime()-$start;
 }

echo 
"<br><br>";
echo 
"Durchschnitt 1: ".($count_f/1000)."<br>n";
echo 
"Durchschnitt 2: ".($count_w/1000)."<br>n";
echo 
"<br><br><b>Fertig.</b>";
exit;
?>

Da wechselt der Gewinner immer mal. Statistik halt.

overclocker 16.05.2003 22:13:08

ok, hab dein komplettes Skript übernommen:

1 Durchlauf:
Durchschnitt 1: 2.7191E-005
Durchschnitt 2: 2.6151E-005

2 Durchlauf:
Durchschnitt 1: 5.337E-005
Durchschnitt 2: 2.8938E-005

3 Durchlauf:
Durchschnitt 1: 2.8677E-005
Durchschnitt 2: 3.1513E-005

4 Durchlauf:
Durchschnitt 1: 3.1417E-005
Durchschnitt 2: 2.5938E-005

5 Durchlauf:
Durchschnitt 1: 2.8465E-005
Durchschnitt 2: 3.5404E-005

6 Durchlauf:
Durchschnitt 1: 3.3862E-005
Durchschnitt 2: 3.0071E-005

OK, so läufts bei mir..
im Übrigen weiß ich auch, dass Benchmarks öfters durchgeführt werden.. denke nicht, dass ich ein absoluter Anfänger in der Computerwelt bin, nur weil ich nicht 900 posts hab.

c4 17.05.2003 07:35:56

Also kann man sagen, dass es bei dem Beispiel egal ist, ob manreg. Exp. oder Stringfunktionen nimmt. Letztere werde ich aber trotzdem bevorzugen. :)


Zitat:

im Übrigen weiß ich auch, dass Benchmarks öfters durchgeführt werden.. denke nicht, dass ich ein absoluter Anfänger in der Computerwelt bin, nur weil ich nicht 900 posts hab
Locker bleiben! War doch nur ein Satz. Ich wollte nicht zum Ausdruck bringen, dass ich Dich belehren muss, nur weil ich mehr Posts habe. Geklärt? Gut. Danke.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:16:34 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.