[php] gedeelte uit een string verwijderen

Pagina: 1
Acties:
  • 508 views sinds 30-01-2008
  • Reageer

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik heb bijv. een volgende string:

31287423.1,230932.89,347783.5,343424.2

Zoals je ziet staan in die sting punten en comma's. elke comma, geeft een verdeling van artikelen weer.
Ik pak er even een uit:
230932.89
De getallen/tekst voor de punt, dienen als id, en het getal achter de punt dient als aantal.

Hoe kan ik nu bijv. de sting:
230932.89,
uit de sting:
31287423.1,230932.89,347783.5,343424.2
halen? zodat er dus dit:
31287423.1,347783.5,343424.2
over blijft?

Ik weet allen het id, dus het getal/tekst vóór de punt, en het getal er achter kan variabel zijn, tot 3 getallen, dus: 12345678.xxx

:?

Verwijderd

Zie hier
Wat natuurlijk ook kan, is de string splitten mbv explode

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Verwijderd schreef op 21 september 2002 @ 17:35:
Zie hier
Wat natuurlijk ook kan, is de string splitten mbv explode
ik zoek meer iets als erigi_replace, maar ik kan niet op gang komen. Kan iemand mij daar mee helpen?

De bovenstaande functie is te omslachtig voor dit, ik weet namelijk niet de plek van de sting, in de grote string, en ik weet niet hoe lang de kleine string is...
eregi is naar mijn mening beter, of heb ik dat verkeerd?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

als je weet wat je zoekt en weet waardoor e het wilt vervangen, gebruik dan gewoon str_replace :)

Als je van te voren niet weet wat je zoekt en misschien wel meer de string als een "array" ziet, ga dan niet met string-functies werken maar zet de string zo snel mogelijk om in een array (met expode bijv).

  • admiral866
  • Registratie: April 2000
  • Laatst online: 23:05

admiral866

The King Personality Disorder

je kan dan toch de begin lokatie opzoeken met een functie.
En dan pak je de maximale lengte van de totale string (id en aantal arts)
Dan pak je die maximale lengte vanaf de gevonden begin lokatie.
Daarna ga je kijken waar en of de komma staat (in je eruit gepakte maximale string). Dan gooi je de komma met alles erachter weg.

Et voila je hebt id.arts

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Laat ik het even beter uitleggen hoe ik het bedoel met eregi replace.

Er zijn 2 dingen bekent, de kleine string begint, met een id, die hebben we, en eindigt met een comma. Die hebben we ook.
Dus, nu hebben we dus bijv. deze sting:

12345678.xxx,

waar de xxx variabel kunnen zijn, als bijv. xx en x.
Als ik die x'en weet, kan ik met eregi_replace makkelijk de sting weghalen, door het te vervangen door: "".
Hoe kan ik nu die 3 variable getallen te weten komen? Of gaat dat niet met RegEx?

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ah, ben er achter, kan het dus idd het beste doen met regex'en...

..{1,3},

Dit in de eregi_replase zetten zou moeten lukken. Ik test 'm ff, en als ik de opl heb, post ik 'm nat...

Verwijderd

Gewoon met indexOf zoeken naar de eerste , vanaf 12345678. daarna zoeken naar de positie waarop 12345678. start, dan heb je dus je grenzen, die vervang je met str_replace. Snap alleen niet waarom dat je het perse met eregi_replace wilt doen, volgens mij is die methode meer om meerdere elementen te gelijk te vervangen (kan ik ook fout hebben hoor).

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

preg_replace gebruiken bijvoorbeeld.
code:
1
/$id_dat_je_hebt\.[0-9]+/

Met de preg_match/preg_replace/etc uitleg (zie ook de algemene faq van P&W) en bovenstaand regeltje code moet je er aardig uitkomen dan :)

Verwijderd

De makkelijkste oplossing is dit denk ik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$string = "31287423.1,230932.89,347783.5,343424.2";

function GetCount($string, $je_bekende_id)
{

$comma_sep = explode(',', $string);

// in $comma_sep staan dus nu 
// [0]=>31287423.1 
// [1]=>230932.89 
// [2]=>347783.5
// [3]=>343424.2

for($i = 0; $i < count($comma_sep); $i++)
{
     $tmp = explode('.', $comma_sep[i]);

     if($tmp[0] == $je_bekende_id)
     {
           return tmp[1];
     }
}

}

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Heb 'm al. Dit werkt perfect wat ik nu heb...

PHP:
1
2
3
4
$string = "12345678.333,66666666.4,55555555.89,";
echo $sting. "<BR><BR>";
$verwijder_id = "66666666";
echo ereg_replace ($verwijder_id."..{1},", "", $string);


Het artikel met id 66666666 moet dus verwijdert worden. Het aantal is dus 4, maar dat weet ik eigenlijk niet...
In de ereg_replace wordt dan de string: 66666666.4,
verwijdert. Ik heb 'm getest op m'n localhost, en werkt super...

Thanks mensen voor de support, ookal ben ik er meer zelf uit gekomen.
(ik heb btw toch wat geleerd door die andere functies eens gezien het hebben...)
Thnx!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Verwijderd schreef op 21 september 2002 @ 17:53:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$string = "31287423.1,230932.89,347783.5,343424.2";
function GetCount($string, $je_bekende_id)
{
$comma_sep = explode(',', $string);
// in $comma_sep staan dus nu 
// [0]=>31287423.1 
// [1]=>230932.89 
// [2]=>347783.5
// [3]=>343424.2

for($i = 0; $i < count($comma_sep); $i++)
{
     $tmp = explode('.', $comma_sep[i]);

     if($tmp[0] == $je_bekende_id)
     {
           return tmp[1];
     }
}

}
Mooi, die functie kon ik nou goed gebruiken, was het volgende waaraan ik moest beginnen! Thnx, spaart wat werk :P

Verwijderd

np :)
Pagina: 1