проблема php sscanf - PullRequest
       15

проблема php sscanf

0 голосов
/ 15 августа 2011

У меня есть эта строка:

City Lat/Lon: (50.7708) / (6.1053)

, и я пытаюсь извлечь эти два числа с помощью sscanf в php следующим образом:

$result = post_request('http://www.ip-address.org/lookup/ip-locator.php', $post_data);
$start =strpos($result['content'], "City Lat/Lon");
$end = strpos($result['content'], "IP Language");
$sub = substr($result['content'],$start,$end-$start);
sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd);
echo $asd;

, но это не дает мне никакого результатани ошибки, что я должен изменить?

это работает, хотя этот путь

sscanf("City Lat/Lon: (50.7708) / (6.1053)", "City Lat/Lon: (%f) / (%f)",$asd,$wer);

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Похоже, вы используете найденную функцию post_request() здесь .

Если это так, ваша переменная $sub содержит различные теги HTML, найденные в ответе.Например, если вы попытаетесь:

var_dump($sub) // Outputs: string 'City Lat/Lon:</th><td class='lookup'> (50.7708) / (6.1053)</td></tr><tr><th>' (length=78)

Вместо sscanf, вы можете попытаться сопоставить широту и долготу, используя регулярное выражение (как предложено @Headshota).Например, одно из возможных решений:

//...

preg_match('#\((?<lat>-?[0-9.]+)\) / \((?<lon>-?[0-9.]+)\)#', $sub, $matches);
echo $matches["lat"]; // Outputs 50.7708
echo $matches["lon"]; // Outputs 6.1053
1 голос
/ 15 августа 2011

у меня работает:

$sub = 'City Lat/Lon: (50.7708) / (6.1053)';
var_dump( sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd), $asd);

... отпечатки:

int(1)
float(50.7708)

Ошибка может быть в вашем точном коде теста или где-то еще.

0 голосов
/ 15 августа 2011

Используйте регулярное выражение:

 preg_match_all("/(\([0-9.]+\))/");

, это вернет массив с вашими значениями.

...