[PHP] Meerdere variabelen maken van 1 variabel

Pagina: 1
Acties:
  • 48 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil dus van 1 ontvangen variabel (in voorbeeld $string) gaan opdelen naar meerdere variabelen, nu heb ik 1 probleem ik wil dus splitten op de | en maar wil dat hij || niet gaat splitsen (dat word dus gebruikt al heb je | in de tekst staan (als escape string zegmaar))

Voorbeeld:
code:
1
$string = "test1=iets|test2=meer||tekst|test3=viool";

En daarbij moet het resultaat hetvolgende zijn:
code:
1
2
3
$_DATA["test1"] = iets;
$_DATA["test2"] = meer|tekst;
$_DATA["test3"] = viool;


Nu zoek ik hier dus de beste oplossing voor. Ik kan dus bijvoorbeeld letter voor letter alles afgaan doormiddel van een for loopje, maar dit is een erg tijdverslindende methode. Daarom zat ik te denken aan de split methode, mijn vraag is, kun je doormiddel van regex zorgen dat hij wel op | split en niet op || ? (of via een andere functie van PHP)

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

PHP:
1
$_DATA = preg_split("/[|]{1}/", $string, -1, PREG_SPLIT_NO_EMPTY);
Zoiets iniedergeval :) .

DM!


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk eens op php.net naar de functie explode :Z :O

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
2
3
4
5
6
$keyValuePairs = explode("|", $string);
$_DATA = array();
foreach ( $keyValuePairs as $key => $value )
{
  $_DATA[$key] = str_replace("||", "|", $value);
}

Dit doet wel ongeveer wat jij vraagt. Was je hier naar opzoek?

edit: Ah, nu begrijp ik het probleem ineens. Hierboven werkt dus niet. Maar je kunt dit oplossen met een assertion in een regex.

[ Voor 36% gewijzigd door Michali op 05-03-2006 17:46 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Verwijderd schreef op zondag 05 maart 2006 @ 17:44:
Kijk eens op php.net naar de functie explode :Z :O
Explode voldoet niet, aangezien dan "" geretourneerd zal worden bij || en test2=meer||tekst opgesplitst zal worden. Overigenas had je dat ook wel iets aardiger mogen brengen ;) .

Ik vergeet overigens in mijn voorbeeld dat je "test1" e.d. nog wel hebben als keys :) .

DM!


Acties:
  • 0 Henk 'm!

Verwijderd

JHS schreef op zondag 05 maart 2006 @ 17:46:
[...]

Explode voldoet niet, aangezien dan "" geretourneerd zal worden bij || en test2=meer||tekst opgesplitst zal worden. Overigenas had je dat ook wel iets aardiger mogen brengen ;) .

Ik vergeet overigens in mijn voorbeeld dat je "test1" e.d. nog wel hebben als keys :) .
Sorry :+ O-)
Ik zit hier op het werk (jah, het is zondag :X ) Maar goed. Misschien ff door de functions list van php.net heen spitten (iets met substrings? :? )

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dit werkt wel:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$string = "test1=iets|test2=meer||tekst|test3=viool";
$keyValuePairs = preg_split("/(?<!\\|)\\|(?!\\|)/", $string);
$_DATA = array();
foreach ( $keyValuePairs as $keyValuePair )
{
  list($key, $value) = explode("=", $keyValuePair);
  $_DATA[$key] = $value;
}
var_dump($_DATA);

?>

[ Voor 39% gewijzigd door Michali op 05-03-2006 17:53 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb t beide even uitgewerkt, en krijg bij het eerste script:
code:
1
2
3
4
5
6
7
Array
(
    [0] => test1=iets
    [1] => test2=meer
    [2] => tekst
    [3] => test3=viool
)

nu zoek ik dus eigenlijk een script die wel op | split maar een escaped op || deze split helaas bij test2=meer||test het ook op... Eveneens bij het andere script die de volgende array krijgt:
code:
1
2
3
4
5
6
7
8
Array
(
    [0] => test1=iets
    [1] => test2=meer
    [2] => 
    [3] => tekst
    [4] => test3=viool
)


(gebaseerd op het voorbeeld van mijn startpost)
Michali schreef op zondag 05 maart 2006 @ 17:51:
Dit werkt wel:
PHP:
1
2
3
$string = "test1=iets|test2=meer||tekst|test3=viool";
$keyValuePairs = preg_split("/(?<!\\|)\\|(?!\\|)/", $string);
var_dump($keyValuePairs);
werkt perfect, bedankt :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nu heb ik vandaag nog wat meer gespeeld met de code van michali en kwam helaas een "foutje" tegen. Als ik bijvoorbeeld de volgende string neem:
PHP:
1
$string = "test2=iets|test3=een beetje tekst|||test4=de allerlaatste test";

Verwacht ik eigenlijk de volgende array:
code:
1
2
3
4
5
6
Array
(
    [0] => test2=iets
    [1] => test3=een beetje tekst|
    [2] => test4=de allerlaatste test
)

Nu krijg ik helaas met het script de volgende array terug:
code:
1
2
3
4
5
Array
(
    [0] => test2=iets
    [1] => test3=een beetje tekst|||test4=de allerlaatste test
)
(let wel dat ik de foreach loop heb weggelaten van bovenstaande script)
Heeft iemand hier nog een oplossing voor? Of moet ik toch een functie in elkaar gaan zetten die letter voor letter de hele variabel doorloopt?

Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

He kom op. Je hebt nu een aantal kant en klare voorbeeldn gehad. Het lijkt me een kleine moeite om dit zelf aan te passen. Ik krijg op het moment de indruk dat je niet zelf nog zaken hebt geprobeerd om je laatste probleem op te lossen, vandaar dat ik nu je topic sluit.

Hier in P&W draait het om het *zelf* ontwikkelen van zaken, niet het verkrijgen van kant en klare oplosssingen van medegebruikers.

Je kan voor je probleem een nieuwe topic openen maar let hierbij dan wel op P&W FAQ - De "quickstart". Hierin zul je zien dat we eigenlijk van je verwachten dat je aangeeft wat je nu hebt geprobeerd en wat daar nu niet mee lukte. Dit geld niet alleen voor de startpost maar ook voor de laatste vraag die je nu stelt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.