سؤال

هل هناك طريقة لتقطيع سلسلة لنفترض أن لدي هذا المتغير

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

أريد تقسيمها بطريقة أريد سحب قيم خطوط الطول والعرض لفصل المتغيرات، subtok لا يخدم الغرض

هل كانت مفيدة؟

المحلول

لا تحتاج إلى تعبير عادي لهذا؛يستخدم explode() لتقسيم السلسلة، أولاً بواسطة &, ، ومن ثم =, ، والتي يمكنك استخدامها لتحليلها بشكل فعال إلى مصفوفة صغيرة لطيفة لتعيين الأسماء إلى القيم.

نصائح أخرى

$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) إذا كنت لا تثق في سلسلة الإدخال.

يبدو أنه قادم من عنوان 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'];

لست متأكدًا تمامًا مما تعرضه في الكود الخاص بك، ربما يكون مجرد بعض الأخطاء المطبعية، هل "$output" هو اسم المتغير، أم جزء من السلسلة؟

بافتراض أنه اسم المتغير، وكنت قد نسيت وضع علامات الاقتباس على السلسلة، فلديك خياران:


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

سيؤدي هذا إلى إنشاء مصفوفة ذات قيم:"Country=UNITED STATES(US)"، "City=Scottsdale, AZ"، إلخ.


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

سيؤدي هذا إلى إنشاء مصفوفة تحتوي على عناصر بديلة هي "المتغيرات" وقيمها:"البلد"، "الولايات المتحدة (الولايات المتحدة)"، "المدينة"، "سكوتسديل، أريزونا"، إلخ.

يمكنك القيام بما يلي:

$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 التي تم تعيينها على القيمة في زوج المفتاح/القيمة.

جميع الإجابات الأخرى غير كافية.يجب أن يعمل هذا في كل مرة!

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

أقترح عليك أن تقرأ عن التعبيرات العادية في تعليمات PHP.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top