我有一个网址http:// * .com / branch / module / view / id / 1 / cat / 2 / etc / 3.
它变成了。
array
(
'module'=>'branch',
'controller'=>'module',
'action'=>'view'
);
接下来我需要获得参数。 我有这个阵列。
/*function getNextSegments($n,$segments) {
return array_slice ( $q = $this->segments, $n + 1 );
}
$params = getNextSegments(3);
*/
array ( 0 => 'id', 1 => '1', 2 => 'cat', 3 => '2', 4 => 'etc', 5 => '3' );//params
我想把它转换成这个: 排列 ( 的 'id'=大于1, “猫” =大于2, “等” =→3, );
我如何使用php函数执行此操作。我知道我可以使用for或foreach,但我认为php有这样的功能,但我无法找到它:(。 谢谢。
class A {
protected function combine($params) {
$count = count ( $params );
$returnArray = array ();
for($i = 0; $i < $count; $i += 2) {
$g = $i % 2;
if ($g == 0 or $g > 0) {
if (isset ( $params [$i] ) and isset ( $params [$i + 1] ))
$returnArray [$params [$i]] = $params [$i + 1];
}
}
return $returnArray;
}
}
这很正常。如果有人有更好的逻辑,请帮助。 再次感谢你。
答案 0 :(得分:1)
PHP没有内置函数。我只是用爆炸和循环来实现它,不应该那么难。
答案 1 :(得分:0)
我在扩展的Zend_Controller_Action类中使用了这样的函数。
public function getCleanParams()
{
$removeElements = array(
'module' => '',
'controller' => '',
'action' => '',
'_dc' => ''
);
return array_diff_key($this->_request->getParams(), $removeElements);
}
这将以干净的方式和您想要的格式为您提供参数。
答案 2 :(得分:0)
您可以使用以下正则表达式(将文件命名为index.php)开始构建路由器:
<?php
$pattern = '@^(?P<module>branch)/'.
'(?P<controller>module)/'.
'(?P<action>view)'.
'(:?/id[s]?/(?P<id>[0-9]+))?'.
'(:?/cat[s]?/(?P<cat>[0-9]+))?'.
'(:?/etc[s]?/(?P<etc>[0-9]+))?@ui';
preg_match($pattern, trim($_SERVER['REQUEST_URI'], '/'), $segment);
echo sprintf('<pre>%s</pre>', var_export($segment, true));
假设您安装了PHP 5.4.x,可以在命令行中键入以下内容:
% php -S localhost:8765
现在浏览http://localhost:8765/branch/module/view/id/1/cat/2/etc/3
输出将是(为清晰起见,删除除0以外的数字键):
array (
0 => 'branch/module/view/id/1/cat/2/etc/3',
'module' => 'branch',
'controller' => 'module',
'action' => 'view',
'id' => '1',
'cat' => '2',
'etc' => '3',
)