在CodeIgniter中,我如何从url将数组类型参数传递给控制器

时间:2013-12-10 09:50:30

标签: php codeigniter

//let my controller be C and method be:
    function X($array){}
//And my url to call it is:
    localhost/mysite/C/X/array

我尝试过但它返回 400-Bad Request 响应。 有谁知道怎么做?快速回复将对我有很大帮助// Thanx

5 个答案:

答案 0 :(得分:2)

本地主机/ mysite的/ C / X /阵列= 1&安培;?&安培;?阵列= 2 ....

$ array = $ this-> input-> get('array');

本地主机/ mysite的/ C / X / 1,2,3,4,5

$array = explode(',' $this->uri->segment(n));

// in app/config/config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:,_-';

我在url中的数组变体(/ tours / novogodniye-turi / visa = yes; duration = small; transport = 4,7,6,2 /)

if ( ! function_exists('filter_parse_segment'))
{
    function filter_parse_segment($segment, $merge_to_get = FALSE)
    {   
        if(empty($segment))
        {
            return FALSE;
        }

        $parameters = explode(";", (string)$segment);

        if(empty($parameters))
        {
            return FALSE;
        }

        $parameters_array = array();

        foreach($parameters as $parameter)
        {
            if(empty($parameter))
            {
                continue;
            }

            $parameter = explode("=", $parameter);

            if( ! isset($parameter[0], $parameter[1]) or empty($parameter[0]))
            {   
                continue;
            }

            if(strpos($parameter[1], ','))
            {
                $parameter[1] = explode(",", $parameter[1]);
            }

            $parameters_array[$parameter[0]] =  $parameter[1];      
        }

        if($merge_to_get === TRUE)
        {
            $_GET = array_merge($_GET, $parameters_array);
        }

        return $parameters_array;
    }
}

// --------------------------------------------------------------------

if ( ! function_exists('filter_collect_segment'))
{
    function filter_collect_segment($array, $suffix = '', $remove = array())
    {   
        if(empty($array) || ! is_array($array))
        {
            return '';
        }

        $segment_str = '';

        foreach ($array as $key => $value)
        {

            if(empty($key) || in_array($key, (array)$remove))
            {
                continue;
            }

            if( ! $segment_str == '')
            {
                $segment_str = $segment_str.';';
            }

            if( ! is_array($value))
            {
                $segment_str = $segment_str.$key.'='.$value;

                continue;
            }

            if(empty($value))
            {
                continue;
            }

            $parsed_value = '';

            foreach ($value as $item)
            {
                if( ! $parsed_value == '')
                {
                    $parsed_value = $parsed_value.',';
                }

                if(is_array($item) || empty($item))
                {
                    continue;
                }

                $parsed_value = $parsed_value.$item;
            }

            $segment_str = $segment_str.$key.'='.$parsed_value;
        }

        if($segment_str != '')
        {
            $segment_str = $segment_str.$suffix;
        }

        return $segment_str;
    }
}


// --------------------------------------------------------------------

if ( ! function_exists('filter_key'))
{
    function filter_key($filter_array, $key, $value = NULL)
    {   
        if( ! isset($filter_array[$key]))
        {
            return;
        }

        if($value == NULL)
        {
            return $filter_array[$key];
        }

        if( ! is_array($filter_array[$key]) && $filter_array[$key] == (string)$value)
        {
            return $value;
        }

        if(is_array($filter_array[$key]) && in_array($value, $filter_array[$key]))
        {
            return $value;
        }

        return FALSE;
    }
}

答案 1 :(得分:1)

如果你想要在非常好的URL中使用解决方案,那么你必须首先循环数组然后将元素连接到一些 - 破折号或+加号这样的符号;

$array = array(1,2,3,4);
$string = "";

foreach($array as $value){
   $string .= $value."-";
}

$string = rtrim($string, "-");

redirect(base_url()."get_products?param=".$string);

在下一页上只需获取参数并使用explode()函数和 - dash符号再次创建数组。

答案 2 :(得分:0)

尝试这样的网址

 if value you have to pass is
 [1,2,3,2]
 then
 localhost/mysite/index.php/C/X/1,2,3,2

答案 3 :(得分:0)

以简单的方式,您可以使数组成为一个字符串,在数组的值之间有一些特殊字符。

然后在着陆页中,您可以使用特殊字符拆分字符串并再次获取数组。

如果值为[1,2,3,4],则使用循环“1,2,3,4”。

然后传递字符串。

在着陆页中用“,”分割字符串,然后你将再次得到数组。

希望它对你有所帮助。

由于

答案 4 :(得分:0)

为什么不将uri段用于数组?您可以计算uri细分,并可以使用它们。即使你可以检查那里有多少阵列。

url.com/1/2/3

http://ellislab.com/codeigniter/user-guide/libraries/uri.html

注意:uri段不能在主控制器索引函数上工作,你必须定义另一个函数而不是索引例如:我不知道它发生了什么但我认为因为htaccess文件我正在使用do remove index.php

url.com/uri_segment_controller/go/1/2/3