在URL中传递多个参数的可能性?

时间:2015-01-12 14:51:23

标签: php codeigniter

我正在开发一个基于搜索的网站,并尝试使用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");

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

  1. 获取所有细分
  2. 对其进行迭代,检查每个关键字,如sizecolor等。(制作白名单)
  3. 如果找到关键字,请假设细分值直到下一个关键字细分或结尾是该特定关键字的值(因此xl2xl将表示如果前面带有关键字的大小size等。)

答案 1 :(得分:0)

你正在使用非常规的友好URI"格式。通常,当传递参数时,存在单个标识符,然后是参数,例如/name/key/name/key/name/key

当您使用正确格式/name/key/name/key/name/keyuri_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;
}