簡體   English   中英

PHP首先找到出現的字符串

[英]PHP find first of occurrence of string

我有如下所示的數據字符串,我一直在努力尋找如何拆分數據以便有效使用它的方法。

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

我需要將字符串拆分為子字符串,列表可能並不總是以相同的順序排列。

例如,它可能如下所示變化:

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

我需要找到“美國”之后的第一個參數。 可以是“城市:”,“名字:”或“姓氏:”。 而且,我還需要知道第一個參數的開始位置。

提前致謝!

只要FirstName:LastName:City:始終在其中,您就應該能夠獲取這三個位置,並使用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;
}

您將擁有第一個參數和位置。

我認為最干凈,最直接的方法是將參數放入數組中,然后遍歷它(盡管性感的正則表達式很誘人)。

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

如果更改參數,則只需更改數組。

首先,剝離“美國”: $str2 = substr($string, 0, strlen("United States "))

然后找到字段: preg_match('/^([^:]+): /', $str2)

第一個參數的位置應為常數: strlen("United States ")

$string = "United States FirstName: Mike LastName: Doe City: Chicago";
$i = strpos($string, ":");           // Find the first colon
while ($string[$i] != " ") { $i--; } // work backwards until we hit a space
// First parameter's name now starts at $i + 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM