Php 代码点火器中关联数组的URI段

Php 代码点火器中关联数组的URI段,php,codeigniter,url,associative-array,Php,Codeigniter,Url,Associative Array,我有以下网址: www.example.com/index.php/search/search_data/Doctor:a/Gender:Male/Language:Urdu/ 我想把它转换成关联数组,比如 $data=array( 'Doctor'=> 'a', 'Gender'=> 'Male', 'Language'=> 'Urdu' ); 我已经尝试使用codeIgniter的URI类函数来实现这一点 $this->u

我有以下网址:

www.example.com/index.php/search/search_data/Doctor:a/Gender:Male/Language:Urdu/
我想把它转换成关联数组,比如

$data=array(
       'Doctor'=> 'a',
       'Gender'=> 'Male',
       'Language'=> 'Urdu'
);
我已经尝试使用codeIgniter的URI类函数来实现这一点

$this->uri->uri_to_assoc(n)
但由于它接受通过'/'分隔的数据,因此我使用'作为分隔符的数据是:'


请帮帮我

我认为没有比手工操作更简单的方法了

首先,检索总段,循环,查看是否包含“:”,然后将其添加到数组中

$segments = $this->uri->segment_array();

$search_array = array();

foreach($segments as $segment) {
    if (strpos($segment, ":") !== FALSE) {
       $e_array = explode(":", $segment);
       $search_array[$e_array[0]] = $e_array[1];
    }
}

在某个地方运行该代码片段将获得理想的结果,$search\u array将是一个带有key=>value的关联数组。

您可以破解URI.php文件。将第431-439行更改为

if (strpos($seg, ":") !== FALSE) {
    list($parameter, $value) = explode(':', $seg);
    if ($i % 2) {
        $retval[$parameter] = $value;
    } else {
        $retval[$parameter] = $value;
        $lastval = $seg;
    }
} else {
    if ($i % 2) {
        $retval[$lastval] = $seg;
    } else {
        $retval[$seg] = FALSE;
        $lastval = $seg;
    }
}

函数的作用是:如果要拆分uri段的值,则解析uri段的值。为什么不编写一个customer helper函数来做你想做的事情呢?这是一个很好的建议,但我要注意,因为它会在你更新CI时破坏代码,或者每次更新CI时你都必须再次这样做