[PHP] String splitsen

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Ik wil in php een string splitsen. Dit gaat normaal met split(), maar er is een moeilijkheid.
Het split teken, een komma, kan voorkomen in een element tussen quotes.
Voorbeeld:
code:
1
2
$string = "Kwik, Kwek, Kwak", "Duck", "Duckstad";
$arr = split(',', $string)

Deze zou ik willen splitsen in:
code:
1
Array ( [0] => "Kwik, Kwek, Kwak" [1] => "Duck" [2] => 23 )

Het wordt echter :
code:
1
Array ( [0] => "Kwik [1] => Kwek [2] => Kwak" [3] => "Duck" [4] => 23 )

Hoe kan ik dit oplossen ?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Splitsen op ", in plaats van , ?

Acties:
  • 0 Henk 'm!

  • Smoonshine
  • Registratie: Mei 2002
  • Laatst online: 22:01

Smoonshine

Feyenoord!!

Volgens mij kan dat niet en zul je een paar regels extra moeten programmeren. Je kan wel iets doen van:

PHP:
1
2
$array_new[0] = $array[0] .", ".$array[1].", ".$array[2];
$array_new[1] = $array[3];


Puur en alleen splitsen op de 3de komma kan niet met de split functie. Dan zul je zelf wat moeten schrijven.

uhm...


Acties:
  • 0 Henk 'm!

  • Zsub
  • Registratie: Juli 2006
  • Laatst online: 21-09 10:27
Zal wel dom zijn, maar zou je die komma's niet als het ware kunnen escapen ofzo?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En daarnaast: wat heb je zelf al geprobeerd? Wat lukte daar niet mee?

We gaan er hier vanuit dat je zelf al wat hebt geprobeerd en dat je hier ook aangeeft wat je hebt geprobeerd en wat daar niet mee lukte. Puur alleen je vraag dumpen is hier niet de bedoeling aangezien het hier een discussie forum is en geen helpdesk. Ook met google zijn er interresant links te vinden dus probeer daar ook eens te zoeken voordat je een topic opent. Zie ook Programming Beleid en dan met name Programming Beleid - De Quickstart.

"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


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Nou ik had dus al split door komma's geprobeerd, maar dat lukte niet.
Ook eerst door quotes splitsen gaat ook niet goed.
Dus ik kwam er niet uit.

Acties:
  • 0 Henk 'm!

Verwijderd

dik_voormekaar schreef op vrijdag 28 september 2007 @ 11:23:
Nou ik had dus al split door komma's geprobeerd, maar dat lukte niet.
Ook eerst door quotes splitsen gaat ook niet goed.
Dus ik kwam er niet uit.
Ik zou zeggen, probeer het eens met reguliere expressies.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dit lijkt op een stukje CSV, even in de PHP manual zoeken en je komt op fgetcsv, niet echt een functie die je hier nuttig kan gebruiken, echter even door de user comments kijken en je ziet iets wat wel nuttig is:

http://nl.php.net/manual/en/function.fgetcsv.php#62524
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?

function csv_string_to_array($str){

   $expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";

    $results=preg_split($expr,trim($str));

    return preg_replace("/^\"(.*)\"$/","$1",$results);

}

$str=<<<EOF
"testing, stuff, here","is testing ok",200,456
EOF;

print_r(csv_string_to_array($str));

?>

output:
Array ( [0] => testing, stuff, here [1] => is testing ok [2] => 200 [3] => 456 ) 

Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 18-09 23:26

Tjark

DON'T PANIC

Waar komt die string vandaan? Als je een CSV file uitleest, check eens fgetcsv
Erkens was me voor...

[ Voor 15% gewijzigd door Tjark op 28-09-2007 11:32 ]

*insert signature here


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Erkens schreef op vrijdag 28 september 2007 @ 11:30:
Dit lijkt op een stukje CSV, even in de PHP manual zoeken en je komt op fgetcsv, niet echt een functie die je hier nuttig kan gebruiken, echter even door de user comments kijken en je ziet iets wat wel nuttig is:
[...]
Wow, ik had nog niet met reguliere expressies gewerkt.
Het werkt goed alleen had die
code:
1
return preg_replace("/^\"(.*)\"$/","$1",$result);

gewoon
code:
1
return $result;

mogen zijn.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Niet dat ik de CSV versie niet tof vind hoor maar mijn suggestie werkt ook:
PHP:
1
2
3
4
5
6
<?PHP
$string = '"Kwik, Kwek, Kwak", "Duck", "Duckstad"';
$arr = split('",', $string);

print_r($arr);
?>

Even de quotes trimmen en je bent klaar.

[ Voor 9% gewijzigd door djluc op 28-09-2007 12:11 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

djluc schreef op vrijdag 28 september 2007 @ 12:11:
Niet dat ik de CSV versie niet tof vind hoor maar mijn suggestie werkt ook:
PHP:
1
2
3
4
5
6
<?PHP
$string = '"Kwik, Kwek, Kwak", "Duck", "Duckstad"';
$arr = split('",', $string);

print_r($arr);
?>

Even de quotes trimmen en je bent klaar.
true, alleen moet je dan zeker weten dat je input niet iets als dit kan worden, want dan werkt het niet meer:
PHP:
1
$string = '"Kwik, Kwek, Kwak" , "Duck", "Duckstad"';

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Klopt, daarom die csv functie gebruiken, ging me alleen even over de opmerking:
Smoonshine schreef op vrijdag 28 september 2007 @ 11:16:
Volgens mij kan dat niet en zul je een paar regels extra moeten programmeren.

Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Die preg_replace vervangt niet de quotes van "Duck"
code:
1
return preg_replace("/^\"(.*)\"$/","$1",$result);
Pagina: 1