2010-08-21 8 views
1

En utilisant PHP, j'essaye de donner à chaque texte spécifique sa propre variable. Je crois que cela peut être réalisé en utilisant la fonction explode list en php. Quelque chose de similaire au code ci-dessous:PHP Liste Explode Variable

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); 

Cependant, le code ci-dessus sépare le texte en utilisant deux points (:). Le texte que je souhaite séparer est entre guillemets, par exemple "WORD". Le texte exemple que je voudrais séparer est comme ci-dessous:

"AULLAH1" "01/07/2010 15:28" "55621454" "123456" "123456,00"

I'D comme le texte/numéros AULLAH1, 01/07/2010 15:28, 55621454, 123456, 123456.00 pour tous avoir une variable PHP spécifique. Si possible, j'aimerais que la fonctionnalité PHP explose pour séparer le contenu par un guillemet débutant (") et une citation finale (").

+0

Dans le résultat final ou dans les données entrantes? –

+0

(1) Avez-vous un contrôle sur la façon dont ces fichiers sont créés? (2) Avez-vous envisagé d'utiliser une base de données réelle? – quantumSoup

+0

** Pekka **: Merci pour votre réponse, je l'apprécie énormément. Je voudrais comme une donnée entrante. Encore une fois, merci pour votre réponse. :) ** quantumSoup **: Tout d'abord, merci pour votre réponse, je les apprécie énormément. ;) (1) C'est seulement le fichier, il y a beaucoup de pas à part ça. Trouver loin de donner une variable est tout ce dont j'ai besoin pour le moment. (2) On me l'a déjà dit, mais malheureusement, je n'ai pas la capacité de le faire. Merci pour votre réponse. ;) – AUllah1

Répondre

3

Une meilleure façon est d'utiliser preg_match_all:

$s = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"'; 
preg_match_all('/"([^"]*)"/', $s, $matches); 
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = $matches[1]; 

La façon la plus simliar serait d'utiliser preg_split:

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = 
    preg_split('/"(?: ")?/', $s, -1, PREG_SPLIT_NO_EMPTY); 
+0

@Timwi, Il n'échoue pas; assigner à 'list' donne' NULL' à '$ home' et' $ shell' dans ce cas. – strager

+0

@strager Était-ce censé échouer? Le PO n'en parle pas et c'est cohérent avec sa solution actuelle. – Artefacto

+0

Ah OK, vous répondiez à un commentaire maintenant supprimé. – Artefacto

1

C'est la solution simple, mais certainement pas le plus robuste:

$data = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"'; 

list($user, $pass, $uid, $gid, $gecos, $home, $shell) 
    = explode('" "', trim($data, '"')); 

var_dump(array($user, $pass, $uid, $gid, $gecos, $home, $shell)); 

// gives: 
array(7) { 
    [0]=> 
    string(7) "AULLAH1" 
    [1]=> 
    string(17) "01/07/2010 15:28 " 
    [2]=> 
    string(8) "55621454" 
    [3]=> 
    string(6) "123456" 
    [4]=> 
    string(9) "123456.00" 
    [5]=> 
    NULL 
    [6]=> 
    NULL 
} 
+0

Salut Strager, j'apprécie énormément votre réponse ainsi que vos efforts. En toute honnêteté, je n'aime pas l'idée d'utiliser les données, bien que je comprenne que cela peut être extrêmement utile à certains moments. Désolé si je semble vous donner une ambiance négative, comme indiqué précédemment, je suis reconnaissant que vous avez répondu. ;) Je vous remercie. – AUllah1

+0

@AUl L'arraying était juste à des fins d'affichage. – Artefacto

+0

@ AUllah1, @Artefacto est correct; Je viens de mettre les éléments dans un tableau pour voir facilement le 'var_dump' pour montrer que cela fonctionne comme prévu. – strager

1

Cela doit être fait avec une expression régulière. Voir la fonction preg_match pour cela.

+1

Ceci est de mauvaise qualité et est mieux placé comme un commentaire. – mickmackusa

0
explode('-', str_replace('"', '', str_replace('" "', '"-"', $data))); 
+0

Cela échouera le '" 01/07/2010 15:28 "'. – strager

+0

Bonjour Omar, merci pour votre réponse. Je l'apprécie énormément. Comme mentionné par strager, il a échoué à cet endroit précis. :(Encore une fois, j'apprécie vraiment votre réponse ainsi que votre effort.;) – AUllah1

+0

Très bien. L'a modifié. –