PHP找到第一个出现的字符串

时间:2010-04-16 01:39:49

标签: php substring

我有一系列数据如下所示,我一直在努力弄清楚如何分割它以便我可以有效地使用它。

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

我需要将字符串拆分为子字符串,列表可能并不总是处于相同的顺序。

例如,它可能会有如下变化:

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

我需要找到“美国”之后首先出现的参数。它可以是'City:','FirstName:'或'LastName:'。而且,我还需要知道第一个参数的起始位置。

提前致谢!

4 个答案:

答案 0 :(得分:1)

只要FirstName:LastName:City:永远在那里,您就应该能够获得所有三个位置并查看哪一个首先出现{{{ 3}}

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

你将拥有你的第一个参数和位置。

答案 1 :(得分:1)

我认为最简洁,最直接的方法(虽然性感的正则表达式很诱人)是将你的参数放在一个数组中并通过它进行预测。

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

如果更改了参数,只需更改数组即可。

答案 2 :(得分:0)

首先,剥离“美国”:$str2 = substr($string, 0, strlen("United States "))

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

第一个参数的位置应该是常数:strlen("United States ")

答案 3 :(得分:0)

$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