[PHP] String ontleden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een string, bijvoorbeeld: $naam_origineel = "softdev_04.xml".
Van deze string wil ik alleen het getal ná de underscore (_) herleiden. Ik heb hiervoor de volgende code gemaakt, maar volgens mij is dit niet echt de juiste. Het werkt wel, maar netjes is het bij lange na niet... (denk ik) :)

PHP:
1
2
3
4
5
6
$naam_origineel = "softdev_5.xml";
$prj_id = explode("_", $naam_origineel);
$prj_id = explode(".xml", $prj_id[1]);

echo("Origineel: ".$naam_origineel."<br />");
echo("prj_id: ".$prj_id[0]."<br />");

Kan dit mooier/netter? De output hiervan is:
code:
1
2
Origineel:softdev_5.xml
prj_id:5

[ Voor 17% gewijzigd door Verwijderd op 03-06-2003 22:52 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

PHP:
1
if (preg_match('/_(\d+)\./', $naam_origineel, $matches)) echo $matches[1];

[ Voor 9% gewijzigd door crisp op 03-06-2003 23:03 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

evt een regexp ala:
PHP:
1
2
preg_match('/[a-z0-9]+_([0-9]+)\.xml/', $naam_origineel, $matches);
print_r($matches);
edit:
Of die van crisp :P

[ Voor 19% gewijzigd door ACM op 03-06-2003 23:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het is maar wat je mooi vindt, maar er zijn meerdere wegen die naar Rome leiden ...
1) String ontleden door te zoeken naar underscore, daarna volgende caracters uit te lezen totdat het geen numerieke waarde meer is (performance)
2) Reguliere expressies (elegante code)
3) Explode (makkelijk)
4) etc

Edit:
/me does his 'Spuit 11 dance' and exits the stage right

[ Voor 10% gewijzigd door Verwijderd op 03-06-2003 23:05 ]


Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 12:53

DUX

blijft ook nu voor Oranje

Als het nummer telkens tussen een underscore en een punt staat:

PHP:
1
2
3
4
5
6
7
8
9
<?php

$naam_origineel = "softdev_5.xml";
$prj_id = substr($naam_origineel, strpos($naam_origineel, "_")+1, (strpos($naam_origineel, ".") - strpos($naam_origineel, "_"))-1);

echo("Origineel: ".$naam_origineel."<br />"); 
echo("prj_id: ".$prj_id[0]."<br />");

?>


offtopic:
Sorry voor lay-outverneuking

[ Voor 18% gewijzigd door DUX op 05-06-2003 01:43 . Reden: zag veeeel later nog een fout in de code ]

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

oeh, je doet een strpos te vaak :P

(niet dat je het verschil in performance zal merken, magoed)

Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 12:53

DUX

blijft ook nu voor Oranje

ACM schreef op 03 June 2003 @ 23:19:
oeh, je doet een strpos te vaak :P

(niet dat je het verschil in performance zal merken, magoed)
Hmm, ja, maar bent niet meer beperkt in het aantal karakters dan een getal mag innemen. Het ziet ook wat onoverzichtelijk uit, i confess. Je hebt wel een probleem zodra er meerdere underscores en/of punten in spel meedoen > hij pakt de tekst tussen de eerste underscore en de eerste punt.

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
DUX schreef op 03 juni 2003 @ 23:22:
[...]


Hmm, ja, maar bent niet meer beperkt in het aantal karakters dan een getal mag innemen. Het ziet ook wat onoverzichtelijk uit, i confess. Je hebt wel een probleem zodra er meerdere underscores en/of punten in spel meedoen > hij pakt de tekst tussen de eerste underscore en de eerste punt.
Met 1 strpos minder is dat ook mogelijk :)

Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 12:53

DUX

blijft ook nu voor Oranje

ACM schreef op 03 juni 2003 @ 23:19:
oeh, je doet een strpos te vaak :P

(niet dat je het verschil in performance zal merken, magoed)
stekkel schreef op 04 June 2003 @ 01:47:
Met 1 strpos minder is dat ook mogelijk :)
Hoe dan? Door eerst een strpos te doen en die vervolgens op te slaan in een variabele:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

$naam_origineel = "softdev_5.xml";
$underscore = strpos($naam_origineel, "_");

$prj_id = substr($naam_origineel, $underscore+1, (strpos($naam_origineel, ".") - $underscore)-1);

echo("Origineel: ".$naam_origineel."<br />"); 
echo("prj_id: ".$prj_id[0]."<br />");

?>


Of doelen jullie op een andere manier?

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

DUX schreef op 05 June 2003 @ 01:42:
[...]
Hoe dan? Door eerst een strpos te doen en die vervolgens op te slaan in een variabele:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

$naam_origineel = "softdev_5.xml";
$underscore = strpos($naam_origineel, "_");

$prj_id = substr($naam_origineel, $underscore+1, (strpos($naam_origineel, ".") - $underscore)-1);

echo("Origineel: ".$naam_origineel."<br />"); 
echo("prj_id: ".$prj_id[0]."<br />");

?>


Of doelen jullie op een andere manier?
daar wordt inderdaad wel op gedoeld. probleem is alleen dat wanneer je een filename hebt als 'blaat_1_2_3.xml' het fout gaat ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 12:53

DUX

blijft ook nu voor Oranje

crisp schreef op 05 juni 2003 @ 02:12:
probleem is alleen dat wanneer je een filename hebt als 'blaat_1_2_3.xml' het fout gaat ;)
Dat probleem had ik al erkend. Natuurlijk kun je dan wel een 1337-script gaan lopen schrijven om te kijken hoeveel underscores en punten erin voorkomen, maar ik denk dat je beter je bestanden goed moet benoemen :Y) .

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende

Pagina: 1