可以在 URL 中传递多个参数吗?

Possibility of passing multiple parameters in URL?

我在一个基于搜索的网站上工作,我正在尝试使用 SEO 友好的 URLs 来传递参数。

是否可以通过以下 URL 并在 CodeIgniter 中获取 URL?

http://www.example.com/search/prize/10/13/14.5/size/xl/2xl/color/black/white-grey/

我可以创建 URL,但我想获得 URL 值,例如 $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)等,但是在这种情况下,段位置是动态的

例如,用户可能只搜索 的价格,因此 URL 将更改为:

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");

我怎样才能做到这一点?

  1. 获取所有段
  2. 遍历它们,检查每个关键字,如 sizecolor 等(创建白名单)
  3. 如果找到关键字,假设直到下一个关键字段或结尾的段值是该特定关键字的值(因此 xl2xl 将表示大小,如果前面有关键字 size,等等)

您使用的是非常规的 "friendly 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;
}