Toon posts:

[php] String separator, explode()

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om de string separator te laten staan in een explode?

Dus dat een string als deze:
code:
1
text%text

Deze array produceerd:
code:
1
2
3
$array[0] = "text";
$array[1] = "%";
$array[2] = "text";

Of is daar een andere functie voor?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

regex?

Doet iets met Cloud (MS/IBM)


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-09 15:34
Met preg_split kan dat wel, maar als je toch explode gebruikt (en je dus een constante string als delimiter hebt), WEET je toch welke string er tussen de delen stond?

Verwijderd

Topicstarter
Kan je daar misschien een voorbeeldje van geven? Mijn regex kennis is niet echt up-to-date.

Verwijderd

Is het mogelijk om de string separator te laten staan in een explode?
Nee: zie http://www.php.net/manual/en/function.explode.php

Er zijn wel een heleboel andere oplossingen aan te dragen, zoals het handmatig tussenvoegen van de separators.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op maandag 08 juli 2002 16:54 schreef int het volgende:
Kan je daar misschien een voorbeeldje van geven? Mijn regex kennis is niet echt up-to-date.
http://gathering.tweakers.net/forum/list_messages/392390/#regexen

Doet iets met Cloud (MS/IBM)


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op maandag 08 juli 2002 16:53 schreef Soultaker het volgende:
Met preg_split kan dat wel, maar als je toch explode gebruikt (en je dus een constante string als delimiter hebt), WEET je toch welke string er tussen de delen stond?
Maar om nou een functie te gebruiken die de serpartor weggooit, en dan de verkregen array te copieëren naar een nieuwe array met de seperators er weer in, is een beetje omslachtig als preg_split() het ook kan :)

Voor regex info moet je in de FAQ zijn :) (mooi stukje van Arien)

Verwijderd

Topicstarter
Soultaker; Je hebt dan wel een probleem wanneer je een string als deze hebt toch?
code:
1
%text%text%

Verwijderd

Iets van:
PHP:
1
<?$regs="/([A-Za-z0-9]+|\\%)/";preg_match_all($regs,$string,$resultarray);?>

probeer dit es. De resultaten moeten dan in $resultarray[1][<nr>] komen

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-09 15:34
Op maandag 08 juli 2002 16:55 schreef int het volgende:
Soultaker; Je hebt dan wel een probleem wanneer je een string als deze hebt toch?
code:
1
%text%text%
Nee, want hieruit krijg je een array met als inhoud ("", "text", "text", ""), zoals het ook hoort.

Ik weet trouwens niet wat je met die array van plan bent, maar als je die delimiters alleen wilt processen in een lusje ofzo, hoef je ze natuurlijk niet echt in je array te hebben:
code:
1
2
3
4
5
6
$array = explode ($delim, $invoer);
for($i = 0; $i < sizeof($array); $i++)
{
  $part = ($i % 0) ? $delim : $part[int($i/2)];
  ... /* Doe iets met $part */
}

Ofzo (correcte werking niet gegarandeerd).

Verwijderd

Topicstarter
Op maandag 08 juli 2002 16:55 schreef Beeehhh het volgende:
Iets van:
PHP:
1
<?$regs="/([A-Za-z0-9]+|\\%)/";preg_match_all($regs,$string,$resultarray);?>

probeer dit es. De resultaten moeten dan in $resultarray[1][<nr>] komen
Dit gaat wel werken. Iedereen bedankt voor alle hulp :).

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

in jawmail's spellcheck plugin gebruiken ze een strtok() met wat andere shit hiervoor.

Klaar voor een nieuwe uitdaging.


  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 19-08 14:53
Op maandag 08 juli 2002 16:50 schreef int het volgende:
Is het mogelijk om de string separator te laten staan in een explode?
Eerst exploden en dan vervolgens de string seperator er weer tussen 'lijmen'. Laat ik even een voorbeeldje geven:
PHP:
1
<?$txt = '%hoi%hoi%';// De seperator definiërendefine('SEP', '%');// Explode$exploded = explode(SEP, $txt);// Aantal stukjes tellen$no_exploded = count($exploded);// Teller $j initialiseren$j = 1;$array[0] = $exploded[0];// Nu alles aan elkaar lijmen met stukjes ertussen...// Let op: hij begint met $i = 1! Dit om de seperator er// tussen te krijgen.for($i = 1; $i < $no_exploded; $i++){    $array[($i * 2) - 1] = SEP;    $array[($i * 2)] = $exploded[$i];}print_r($array);?>

Misschien maak ik er wel even een functie van, dan zal ik hem aan de Codebase toevoegen. :)

edit: Je kan uiteraard ook een regex functie gebruiken. :)

Verwijderd

code:
1
$array = preg_split("/(%)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Soultaker:
Nee, want hieruit krijg je een array met als inhoud ("", "text", "text", ""), zoals het ook hoort.

Ik weet trouwens niet wat je met die array van plan bent, maar als je die delimiters alleen wilt processen in een lusje ofzo, hoef je ze natuurlijk niet echt in je array te hebben:
code:
1
2
3
4
5
6
$array = explode ($delim, $invoer);
for($i = 0; $i < sizeof($array); $i++)
{
  $part = ($i % 0) ? $delim : $part[int($i/2)];
  ... /* Doe iets met $part */
}

Ofzo (correcte werking niet gegarandeerd).
* drm vraagt zich af wat x modulus 0 precies betekent :D
Als je nagaat dat de modulus "restwaarde na deling door" betekent, betekent dat dat je hier poogt te delen door 0. Oftewel, je gaat na of een deling door 0 een getal oplevert. Aangezien dit altijd false is (afgezien van een evt. divide by zero error), kun je net zo goed
code:
1
$part = $part [ (int) $i / 2 ];

doen. En dan kom je erachter dat $part geen array is, en... en...
</flauw>

overigens moet je in PHP zo casten: $a = (int) $b; niet met $a = int($b)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Ik heb een ff een simpel benchmarkje gedraait, van sommige oplossingen:

Benchmark 250 separators:

1. Cheetah
0.00041

2. elnino
0.00137

3. Beeehhh
0.00224

De andere manieren ben ik nu mee bezig, maar ik denk niet dat die sneller zullen zijn...
Pagina: 1