2009-02-25 5 views
0

j'ai variables $result qui contient ceParsing en PHP

Country: USA City: NY Latitude: 32.2667 Longitude: 71.9167 

Comment puis-je l'analyse syntaxique je peux me le sortir mettre comme ceci:

Country=USA&City=NY&Latitude=32.2667&Longitude=71.9167 
+0

Ce que vous décrivez n'est pas vraiment l'analyse mais plutôt la manipulation de chaînes. L'analyse consiste à extraire des données structurées d'une chaîne. –

+0

C'est une donnée structurée. Il arrive juste qu'un raccourci rapide de remplacement est possible. – Mario

Répondre

3

Un hack

str_replace(array(': ', ' '), array('=', '&'), $string); 
+0

j'aime mieux celui-ci car il s'occupe de ':' avant '' qui empêche '' & ' – Jayrox

+0

@Jayrox, le mien aussi, mais je pense que la solution de Mario est meilleure car elle n'a qu'un appel de fonction par opposition au mien qui a deux. –

2
str_replace(' ', '&', str_replace(': ', '=', $string)); 

Il peut fonctionner comme vouloir.

2

Si, à un moment donné que vous devez faire une validation de vos données la méthode str_replace peut cesser de travailler pour vous (bien que ce soit la meilleure façon de résoudre votre problème). Vous souhaitez ensuite extraire les données dans une solution plus intelligente, mais plus compliqué:

$string = "Country: USA City: NY Latitude: 32.2667 Longitude: 71.9167"; 
$matches = Array(); 
$has_match = preg_match('/Country: (\w+) City: (\w+) Latitude: ([0-9.]+) Longitude: ([0-9.]+)/',$string,$matches); 
if ($has_match) { 
    list($country,$city,$lat,$long) = array_slice($matches,1); 
} 
else { 
    print "no matches"; 
} 

Maintenant, vous pouvez faire ce que vous aimez pour vous assurer que le pays $, ville $, $ lat et long $ valeurs sont sains d'esprit et puis joignez-les dans une chaîne de requête avec:

$query_string = "Country=$country&City=$city&Latitude=$lat&Longitude=$long" 
+0

son ne fonctionne pas, ma chaîne est stockée dans la variable comme ça Pays: ÉTATS-UNIS (US) Ville: Scottsdale, AZ Latitude: 33.686 Longitude: -111.87 – hitek

+0

/Pays: (. *) Ville: (. *) Latitude : ([0-9.] +) Longitude: ([0-9.] +)/ est une expression rationnelle plus inclusive et devrait fonctionner pour vos données mais est moins résistante aux mauvaises données. –

+0

changez l'expression rationnelle en:/Pays: (\ w +) (\ (. * \)) Ville: (\ w +), (. *) Latitude: ([0-9.] +) Longitude: ([0-9 .] +)/ et les variables correspondantes à: liste ($ country, $ countrycode, $ ville, $ état, $ lat, $ long) = array_slice ($ matches, 1); pour extraire les autres informations. –

0

L'expression régulière dans la deuxième réponse est correcte, mais elle nécessite quelques petites corrections.

preg_match ('/^Pays = (\ w +) & Ville = (\ w +) & Latitude = ([0-9.] +) & Longitude = ([0-9.] +) /', $ chaîne, $ matches);