нарезка строк, php - PullRequest
       13

нарезка строк, php

1 голос
/ 26 февраля 2009

есть ли способ нарезать строку, скажем, у меня есть эта переменная

$output=Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87

Я хочу нарезать его так, как я хочу получить значения широты и долготы для разделения переменных, субток не служит цели

Ответы [ 7 ]

8 голосов
/ 26 февраля 2009

Вам не нужно регулярное выражение для этого; используйте explode(), чтобы разделить строку, сначала на &, а затем на =, которую вы можете использовать, чтобы эффективно разобрать ее в симпатичный маленький массив, отображающий имена в значения.

3 голосов
/ 26 февраля 2009
$output='Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87';
parse_str($output, $array);
$latitude = $array['latitude'];

Вы также можете просто сделать

parse_str($output);
echo $latitude;

Я думаю, что использование массива лучше, поскольку вы не создаете переменные повсеместно, что потенциально может быть опасно (например, register_globals), если вы не доверяете входной строке.

2 голосов
/ 26 февраля 2009

Похоже, что это происходит от URL, хотя кодировка URL исчезла.

Я поддерживаю предложения explode() или preg_split(), но вас также может заинтересовать parse_str().

$output = "City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87";
parse_str($output, $results);
$lat = $results['Latitude'];
$lon = $results['Longitude'];
0 голосов
/ 14 июня 2013

Все остальные ответы недостаточны. Это должно работать каждый раз!

function slice($string, $start){
  $st = $string; $s = $start; $l = strlen($st); $a = func_get_args();
  $e = isset($a[2]) ? $a[2] : $l;
  $f = $e-$s;
  $p = $e < 0 && $s > 0 ? $l+$f : $f;
  return substr($st, $s, $p);
}
0 голосов
/ 26 февраля 2009

Вы можете сделать следующее:

$output = 'Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87';

$strs = explode('&', $output);
foreach ($strs as $str) {

   list($var, $val) = explode('=',$str);
   $$var = trim($val);

}

Это даст вам такие переменные, как $ Latitude и $ Longitude, которые установлены в значение в паре ключ / значение.

0 голосов
/ 26 февраля 2009

Я не уверен, что именно вы демонстрируете в своем коде, может быть, это просто некоторые опечатки, является ли "$ output" именем переменной или частью строки?

Предполагая, что это имя переменной, и вы просто забыли поместить кавычки в строку, у вас есть пара опций:


$sliced = explode('&', $output)

Это создаст массив со значениями: "Страна = СОЕДИНЕННЫЕ ШТАТЫ (США)", "Город = Скоттсдейл, Аризона" и т. Д.


$sliced = preg_split('/[&=]/', $output);

Это создаст массив с чередующимися элементами, которые являются «переменными» и их значениями: «Страна», «США», «Город», «Скоттсдейл, Аризона» и т. Д.

0 голосов
/ 26 февраля 2009

Предлагаю вам прочитать о регулярных выражениях в справке PHP.

...