我在查询字符串URL的get参数上使用爆炸和str_replace。我的目标是按特定字符分割字符串,以获得我想要的字符串值。我有问题。它应该起作用,但不起作用。
下面是两个链接示例,其中包含我用于str_replace的查询字符串和分隔符。
http://computerhelpwanted.com/jobs/?occupation=analyst&position=data-analyst
正如您所看到的,上面的URL参数是位置,值是数据分析师。分隔符是短划线-
。
http://computerhelpwanted.com/jobs/?occupation=analyst&position=business+systems+analyst
上述URL使用相同的参数CCD_ 2,取值为业务+系统+分析师。分隔符是+
符号。
我试图从查询字符串中获得的值是单词analyser。它是分隔符后面的最后一个单词。
这是我的代码,它应该能完成任务,但由于某种原因没有。
$last_wordPosition = str_replace(array('-', '+')," ", end(explode(" ",$position)));
如果分隔符是+
符号,它会工作,但如果分隔符为-
符号,它就会失败
有人知道为什么吗?
你的东西顺序不对:
$last_wordPosition = end(explode(" ", str_replace(array('-', '+'), " ", $position)));
您可能希望将其拆分,以免在不将变量传递给end
:时出现E_STRICT
错误
$words = explode(" ", str_replace(array('-', '+'), " ", $position));
echo end($words);
或者类似于:
echo preg_replace('/[^+-]+('+|-)/', '', $position);
正如@MarkB建议的那样,您应该使用parse_url和parse_str,因为这在您的情况下更合适。
来自parse_url:的文档
此函数解析URL并返回一个关联数组,该数组包含存在的URL的各种组件中的任何一个。
来自parse_str:的文档
将str解析为通过URL传递的查询字符串,并在当前作用域中设置变量。
所以你想做的是:
$url1 = 'http://computerhelpwanted.com/jobs/?occupation=analyst&position=data-analyst';
$url2 = 'http://computerhelpwanted.com/jobs/?occupation=analyst&position=business+systems+analyst';
function mySplit($str)
{
if (preg_match('/'-/', $str))
$strSplited = split('-', $str);
else
$strSplited = split(' ', $str);
return $strSplited;
}
parse_str(parse_url($url1)['query'], $output);
print_r($values = mySplit($output['position']));
parse_str(parse_url($url2)['query'], $output);
print_r($values = mySplit($output['position']));
输出
Array
(
[0] => data
[1] => analyst
)
Array
(
[0] => business
[1] => systems
[2] => analyst
)
你说过你需要这些价值观的最后一个元素。因此,你可以找到结束和重置有用:
echo end($values);
reset($values);
回答我自己的问题,展示我是如何做到这一点的。似乎比公认的答案要多得多的代码,但由于有人建议我使用parse_url和parse_str,但我无法正常工作,所以我用了不同的方法。
function convertUrlQuery($query) {
$queryParts = explode('&', $query);
$params = array();
foreach ($queryParts as $param) {
$item = explode('=', $param);
$params[$item[0]] = $item[1];
}
return $params;
}
$arrayQuery = convertUrlQuery($_SERVER['QUERY_STRING']); // Returns - Array ( [occupation] => designer [position] => webmaster+or+website-designer )
$array_valueOccupation = $arrayQuery['occupation']; // Value of occupation parameter
$array_valuePosition = $arrayQuery['position']; // Value of position parameter
$split_valuePosition = explode(" ", str_replace(array('-', '+', ' or '), " ", $array_valuePosition)); // Splits the value of the position parameter into separate words using delimeters (- + or)
然后访问阵列的不同部分
print_r($arrayQuery); // prints the array
echo $array_valueOccupation; // echos the occupation parameters value
echo $array_valuePosition; // echos the position parameters value
print_r($split_valuePosition); // prints the array of the spitted position parameter
foreach ($split_valuePosition as $value) { // foreach outputs all the values in the split_valuePosition array
echo $value.' ';
}
end($split_valuePosition); // gets the last value in the split_valuePosition array
implode(' ',$split_valuePosition); // puts the split_valuePosition back into a string with only spaces between each word
其输出以下
arrayQuery = Array
(
[occupation] => analyst
[position] => data-analyst
)
array_valueOccupation = analyst
array_valuePosition = data-analyst
split_valuePosition = Array
(
[0] => data
[1] => analyst
)
foreach split_valuePosition =
- data
- analyst
end split_valuePosition = analyst
implode split_valuePosition = data analyst