我正在开发一个基于搜索的网站,并尝试使用SEO友好的网址传递参数。
是否可以传递以下URL并获取CodeIgniter中的URL?
http://www.example.com/search/prize/10/13/14.5/size/xl/2xl/color/black/white-grey/
我可以创建网址,但我想获取网址值$prize = array("10","13","14.5")
,$size= array("xl","2xl")
和$color = array("black","white-grey")
。
我尝试使用uri_to_assoc()
函数,但它不起作用。我得到以下输出:
[price] => 10,
[13] => 14.5
...
这是错误的。
注意:我尝试使用$this->uri->segment(1)
等,但在这种情况下,细分受众群的位置是动态的。
例如,用户可能只搜索$10
的价格,因此该网址将更改为:
http://www.example.com/search/prize/10/size/xl/2xl/color/black/white-grey/
现在必须更改获取size
的细分位置。在这种情况下,我想:
$prize = array("10");
$size = array("xl", "2xl");
$color = array("black", "white-grey");
我怎样才能做到这一点?
答案 0 :(得分:0)
size
,color
等。(制作白名单)xl
和2xl
将表示如果前面带有关键字的大小size
等。)答案 1 :(得分:0)
你正在使用非常规的友好URI"格式。通常,当传递参数时,存在单个标识符,然后是参数,例如/name/key/name/key/name/key
。
当您使用正确格式/name/key/name/key/name/key
和uri_to_assoc()
时,您会得到:
array(
'name' => 'key',
// etc...
)
但使用类似/prize/1/2/3/size/s/m/l/color/black/white/grey
的内容会产生:
array(
'prize' => 1,
2 => 3,
'size' => 's',
'm' => 'l',
// etc...
)
这对你没用。
您必须单独获取所有细分,并使用foreach
构建数组:
$segments = $this->uri->segment_array();
$prize = array();
$size = array();
$color = array();
$curKey = '';
foreach ($segments as $seg) {
if (in_array($seg, array('prize', 'size', 'color'))) {
$curKey = $seg; continue;
}
if (!empty($curKey)) ${$curKey}[] = $seg;
}
// use $prize, $size, and $color as you wish
或者使用多维数组:
$parameters = array(
'prize' => array(),
'size' => array(),
'color' => array(),
);
$segments = $this->uri->segment_array();
$curKey = '';
foreach ($segments as $seg) {
if (in_array($seg, array('prize', 'size', 'color'))) {
$curKey = $seg; continue;
}
if (!empty($curKey)) $parameters[$curKey][] = $seg;
}