PHP Zahlen im String ermitteln

AMD4Ever

Ensign
Dabei seit
Apr. 2008
Beiträge
188
Hallo,

nachdem ich gestern eine sehr gute Hilfestellung bekommen habe, wie man mit wenig Programmcode mal schnell eine Tabellenstruktur umformatieren kann, benötige ich ein wenig Hilfe, wie man folgendes machen kann. Google hat mir zwar ein Ergebnis geliefert, aber eine Lösung zu der Problemstellung ist nicht vorhanden.

Man hat in einer MySQL-Tabelle eine Anschrift stehen z.B. Postweg25.

diese habe ich in einer Variable gespeichert.
Nun möchte ich die Hausnummer der Anschrift aus dem String bekommen, idealer Weise reicht mir aber das Zeichen der Zahl schon, quasi 2. Wie kann man das geschickt umsetzen, da weder die Länge des Strings noch die Länge der Zeichen vor der ersten Zahl konstant sind.

Danke im Voraus
 

mansior

Cadet 3rd Year
Dabei seit
Mai 2010
Beiträge
53
Ahoi,

ich hab zwar keine Ahnung bie PHP, aber ich würde sagen, dass du RegExp nutzen musst. In dem Fall kann ich dir eine Seite empfehlen:
www.txt2re.com

Hab dort mal dein Beispiel eingegeben und PHP gewählt. Folgendes wird vorgeschlagen...

Code:
<?php
  # URL that generated this code:
  # http://txt2re.com/index-php.php3?s=Postweg25&4

  $txt='Postweg25';

  $re1='.*?';	# Non-greedy match on filler
  $re2='(\\d+)';	# Integer Number 1

  if ($c=preg_match_all ("/".$re1.$re2."/is", $txt, $matches))
  {
      $int1=$matches[1][0];
      print "($int1) \n";
  }

  #-----
  # Paste the code into a new php file. Then in Unix:
  # $ php x.php 
  #-----
?>

kann man sicher noch optimieren...

Gruß
 

vailor

Cadet 3rd Year
Dabei seit
Jan. 2011
Beiträge
44
wenn du ein trennzeichen verwendest (zb ein leerzeichen), ist das überhaupt kein problem.

mit $pos=strpos($string," "); kriegst du die position des leerzeichens im string.
dann brauchst du dir nur noch die zahl rauskopieren. das geht zb. mit

$len=strlen($string);
$hnr=substr($string,$pos+1,$len);

sollte so oder ähnlich gehn. ohne gewähr. ;)

lg vailor
 

mansior

Cadet 3rd Year
Dabei seit
Mai 2010
Beiträge
53
@Searinox
bei deinen vorschlägen darf man aber keine trennzeichen verwenden die wirklich in einem straßennamen auftauschen könnten... daher ist leerzeichen oder bindestrich eher ungünstig.

@AMD4Ever
ich glaube du solltest noch etwas weiter gehen. generell würde ich straße und hausnummer in unterschiedliche spalten speichern. sonst bekommst du irgendwann probleme mit folgenden fällen:
"straße des 17. juni 150"
"hauptstrasse 150a"

gruß
 

AMD4Ever

Ensign
Ersteller dieses Themas
Dabei seit
Apr. 2008
Beiträge
188
ja, ist mir schon verständlich. Ich habe das allerdings nicht für Hausnummern verwendet, sondern für ein analoges Beispiel für meine Webseite.

Ich musste u.a Fallunterscheidungen machen, und damit Links setzen.

Versuche gerade auf meiner HP unter Hardware-Infos ein vernüftiges Formular für die Grafikkartenserie machen. Und da nVIDIA gerne mal das Bezeichnungsschema ändert, muss ich viel coden

PHP:
if (preg_match("/GeForce G/",  $row1['Name']))
{preg_match("/\d+/",$row['Name'],$result);

$serie = substr($result[0], 0, -2);
$serie ='<a href="http://www.amdarea51.de/html/vgas/nvidia-geforce/geforce_'.$serie.'00/geforce_'.$serie.'00.php">/GeForce '.$serie.'00</a>';
}

Als erstes treffe ich ne Fallunterscheidung wo ich zwischen dem alten Schema und dem neuen sortiere (GeForce 1 - 9, GeForce G/GT/GTX/GTS 200 - 500)

Dann muss ich quasi aus dem row, also einen Record die Serie aufteilen (GeForce 500 z.B.),
dann die Links setzen, damit man vernüftig navigieren kann.

sieht ungefähr so aus:
http://www.amdarea51.de/test.php

Nicht wundern, ich bin da gerade drin am arbeiten und es ist noch nicht alles im Formular
 
Zuletzt bearbeitet:

Searinox

Lt. Junior Grade
Dabei seit
Juni 2008
Beiträge
257
Zitat von mansior:
@Searinox
bei deinen vorschlägen darf man aber keine trennzeichen verwenden die wirklich in einem straßennamen auftauschen könnten... daher ist leerzeichen oder bindestrich eher ungünstig.

man könnte aber die strassen name mit einem semikolon von den nummern trennen also

postweg;25

dann bräuchte man auch keine zwei spalten sondern nur die abfrage mit dem explode
 
Top