我有一系列数据如下所示,我一直在努力弄清楚如何分割它以便我可以有效地使用它。
"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:'。而且,我还需要知道第一个参数的起始位置。
提前致谢!
答案 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