我在查询字符串URL的get参数上使用了explode和str_replace。我的目标是按特定字符拆分字符串以获取我想要的字符串中的值。我有问题。它应该有效,但不是。
以下是我使用str_replace查询字符串和分隔符的两个链接示例。
http://computerhelpwanted.com/jobs/?occupation=analyst&position=data-analyst
如您所见,上面的URL参数是position,值是data-analyst。分隔符是短划线-
。
http://computerhelpwanted.com/jobs/?occupation=analyst&position=business+systems+analyst
并且上面的这个网址使用相同的参数position
,而值是business + systems + analyst。分隔符是+
符号。
我想从查询字符串中获取的值是分析师这个词。这是分隔符之后的最后一个词。
这是我的代码应该做的伎俩,但由于某种原因没有。
$last_wordPosition = str_replace(array('-', '+')," ", end(explode(" ",$position)));
如果分隔符是+
符号,则它有效,但如果分隔符是-
符号则失败。
任何人都知道为什么?
答案 0 :(得分:1)
你的事情顺序错误:
$last_wordPosition = end(explode(" ", str_replace(array('-', '+'), " ", $position)));
您可能希望将其拆分,以便在未将变量传递给E_STRICT
时不会出现end
错误:
$words = explode(" ", str_replace(array('-', '+'), " ", $position));
echo end($words);
或类似的东西:
echo preg_replace('/[^+-]+(\+|-)/', '', $position);
答案 1 :(得分:0)
正如@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
)
你说你需要这些价值观的最后一个元素。因此,您可以找到有用的end和reset:
echo end($values);
reset($values);
答案 2 :(得分:0)
回答我自己的问题,以显示我最终是如何做到这一点的。似乎比接受的答案更多的代码,但由于我被建议使用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