2009-02-25 18 views
1

bir dize dilim için bir yol ıdize dilimleme, php

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

i ayrı değişkenlere enlem ve boylam değerleri çekmek istiyorum bir şekilde bunu kesmek isteyecektir bu değişkeni var ki orada sağlar olduğunu subtok

cevap

8

Bunun için düzenli bir ifadeye ihtiyacınız yoktur; Dizeyi ilk olarak & ve daha sonra = ile ayırmak için explode() öğelerini kullanın; bu değerleri, adlara değerlerin eşleştirildiği güzel bir küçük dizi halinde etkili bir şekilde ayrıştırmak için kullanabilirsiniz.

+0

Yukarıdakilere bir örnek verebilir misiniz? Teşekkürler. – hitautodestruct

+0

$ var_array = patlayabilir ('&', $ var_string); foreach ($ var_to_split olarak $ var_array) – bikemule

+0

Son girişi girdim isabetiyle karıştırdım. Otomatik gönderme tarzının hayranı değil.Ve şimdi bir ön kod bloğunda aşağıdakileri izlemeye çalışmıyorum ne olursa olsun '// Dizeleri ayrı ayrı olarak ayırın $ var_array = patlayabilir ('&', $ var_string); $ mapped_var_array = array(); // eşlemeli varyları foreach ($ var_array $ var_to_split) olarak tutmak için bunu ayarlayın { $ var_to_split = patlayabilir ('=', $ var_to_split); $ mapped_var_array [$ var_to_split [0]] = $ var_to_split [1]; } // Şimdi, $ mapped_var_array ' ile ne isterseniz yapın. @hitautodestruct – bikemule

-1

Hizmet amacına hizmet vermiyor. PHP yardımında düzenli ifadeler okumanızı öneririm.

0

Kodunuzda tam olarak neyi gösterdiğinizden emin değilim, belki sadece bazı yazım hataları, "$ output" değişkenin adı mı, yoksa dizenin bir parçası mı? Bu değerlerle bir dizi yaratacak


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

:

değişkenin adı varsayarsak, ve sadece ipe tırnak koymak unuttum, bir kaç seçenek var "Ülke Bu alternatif elem içeren bir dizi oluşturur


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

= UNITED STATES (ABD)", "Şehir = Scottsdale, AZ" vb veliler "değişkenleri" ve değerlerini olmak: "Ülke", "AMERİKA BİRLEŞİK DEVLETLERİ (ABD)", "Şehir", "Scottsdale, AZ" vb

Aşağıdaki yapabilirdi
0

:

$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); 

} 

Bu, anahtar/değer çiftindeki değere ayarlanmış $ Latitude ve $ Boylam gibi değişkenler sağlar.

+0

Değişken değişkenler? Lütfen hayır :( –

+0

Bu gerçekten kötü bir fikir. Eğer anahtarlarınız boşluk içeriyorsa? PHP'nin ilişkilendirici dizileri burada daha anlamlı olur: $ dizi [$ var] = trim ($ val); – eplawless

3
$output='Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87'; 
parse_str($output, $array); 
$latitude = $array['latitude']; 

Ayrıca sadece ben 'yok eğer (register_globals gibi) potansiyel olarak tehlikeli olabilir ki, her tarafta değişkenleri yaratmak değildir gibi bir dizi daha iyidir kullanarak düşünüyorum

parse_str($output); 
echo $latitude; 

yapabilirdi Giriş dizesine güvenme.

2

URL kodlaması gitmiş olmasına rağmen bir URL'den geliyor gibi görünüyor.

explode() veya preg_split() kullanım önerileriyle ilgileniyorum ancak ilginizi çekebilir parse_str().

$output = "City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87"; 
parse_str($output, $results); 
$lat = $results['Latitude']; 
$lon = $results['Longitude']; 
0

Diğer tüm yanıtlar Yetersiz. Bu Her Zaman Çalışmalı!

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); 
}