PHP string geçtiği ilk bulabilirsiniz

3 Cevap php

Ben aşağıda gibi verilerin bir dize var ve ben verimli bir şekilde kullanmak, böylece o kadar bölmek için nasıl anlamaya çalışıyorum mücadele ettik.

"United States FirstName: Mike LastName: Doe City: Chicago"

Ben altdizgelerin için dize kadar bölmek ve liste her zaman aynı sırayla olmayabilir gerekir.

Örneğin aşağıda gibi değişebilir:

"United States City: Chicago FirstName: Mike LastName: Doe"
"CanadaFirstName: Mike City: Chicago LastName: Doe"

Ben 'ABD' sonra ilk geldiği parametre bulmalıyız. , 'Ad:' veya 'Soyad': It 'Şehir' olabilir. Ve, ben de ilk parametre başlangıç ​​konumunu bilmek gerekir.

Şimdiden teşekkürler!

3 Cevap

Sürece FirstName:, LastName: ve City: her zaman orada olacak gibi, sadece üçünün pozisyonlarını almak ve bir ilk oluştuğu görmek gerekir ile min().

$string = "United States City: Chicago FirstName: Mike LastName: Doe";
$firstname = strpos($string, 'FirstName:');
$lastname = strpos($string, 'LastName:');
$city = strpos($string, 'City:');

$position = min($firstname, $lastname, $city);
switch($position){
   case $firstname:
      $first_parameter = 'FirstName:';
      break;
   case $lastname:
      $first_parameter = 'LastName:';
      break;
   case $city:
      $first_parameter = 'City:';
      break;
}

Size ilk parametre ve konuma sahip olacak.

Ben (bir seksi regex cazip olsa) bunu yapmak için en temiz ve en basit yolu, bir dizi içinde parametreleri koymak ve bunun üzerinden foreach olduğunu düşünüyorum.

$params = array(
    'FirstName:',
    'LastName:',
    'City:',
);

$first = null; # First parameter
$first_pos = null; # First parameter position

foreach($params as $var)
{
    $pos = strpos($string, $var);
    if($pos < $first_pos || null === $first_pos)
    {
        $first = $var;
        $first_pos = $pos;
    }
}

Eğer params'ı değiştirirseniz, sadece dizisini değiştirmek.

Birincisi, "Amerika Birleşik Devletleri" kapalı şerit: $str2 = substr($string, 0, strlen("United States "))

Sonra alanı bulmak: preg_match('/^([^:]+): /', $str2)

strlen("United States "): ilk parametre konum sabit olmalı