我有一个收集两条信息的字符串。斜杠之前的所有内容都是搜索变量,之后的所有内容都是页码。
假设如下:
$search = "classic rock/8"
应该是$ searchvalue [0] ='classic $ searchvalue [1] ='rock'$ searchvalue [x] = etc ... 然后$ page = 8
我尝试了几种方法,最后一种方法是首先删除斜线后的所有内容。
$search=substr($search, 0, strpos($search, '/'));
然后将$ search值分成一个数组。 然后返回(第3次!)并通过删除斜杠前的所有内容来获取页面变量。
我知道这是非常低效的。有没有办法一次性完成这些操作?
提前致谢!
答案 0 :(得分:3)
您可以将该字符串爆炸并获得相同的结果!
$res = explode("/", $search);
$page = $res[1]; //This is the page
$searchValues = explode(" ", $res[0]); //These are the results
答案 1 :(得分:1)
您可以使用strrpos
:
$search = 'classic rock/8';
$page = substr($search, strrpos($search, '/')+1); // 8
答案 2 :(得分:0)
为了响应一次通过,您可以使用preg match all功能或
你可以使用preg split功能。
无论哪种方式都有它的缺点,但爆炸和strrpos或其他任何东西也是如此。
很多人没有意识到他们可以用更详细的方式使用preg split 准确地刻出一根绳子。这可以通过详细定义拆分以包括捕获来完成。这种方式有点不同,但如果你学会了怎么做,那就有很大的力量。
正则表达式:
# ([^\s\/]+)(?:\s+|$)|\/+\s*(\d+)[\s\/]*$|\/.*$
# Delim-1
( [^\s\/]+ ) # (1), A group of not whitespace nor forward slash
(?: \s+ | $ ) # folowed by whitespace or EOL
# Delim-2
| \/+ \s* # Forward slashes folowed by whitespaces
( \d+ ) # (2), folowed by a group of digits
[\s\/]* $ # followed by whitespaces or slashes until EOL
# Delim-3
| \/ .* $ # Forward slash folowed by anything until EOL
PHP代码:
<?php
$keywords = preg_split
(
"/([^\s\/]+)(?:\s+|$)|\/+\s*(\d+)[\s\/]*$|\/.*$/",
"classic rock/8",
-1,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
);
print_r($keywords);
?>
Result:
Array
(
[0] => classic
[1] => rock
[2] => 8
)