如何获取类型的数组

时间:2013-03-16 02:18:38

标签: php magento url parameters param

在Magento中,通常我们习惯得到param

http://magento.com/customer/account/view/id/122

我们可以通过

获得参数
$x = $this->getRequest()->getParam('id');
echo $x; // value is 122

现在我知道$ x只是为了从参数中获取一个字符串。

有没有办法将$ x作为数组?

例如:

Array
(
    [0] => 122
    [1] => 233
)

6 个答案:

答案 0 :(得分:4)

例如:

http://magento.com/customer/account/view/id/122-233

$x = $this->getRequest()->getParam('id');
$arrayQuery = array_map('intval', explode('-', $x)));
var_dump($arrayQuery);

答案 1 :(得分:3)

如果你的意思是将所有参数作为一个数组(可能是一个varien对象):

$params = $this->getRequest()->getParams();

答案 2 :(得分:3)

我担心Zend Framework或Magento目前无法将数组参数传递给zend url。

以下是passing get variable as an array报告的错误。

答案 3 :(得分:3)

您还可以在查询参数上使用括号,例如http://magento.com/customer/account/view/?id [] = 123& id [] = 456

然后在运行以下内容之后,$ x将是一个数组。

$x = $this->getRequest()->getParam('id');

答案 4 :(得分:2)

我建议你是否希望将来自访问者的输入作为数组,而不是将它们传递给URL,因为GET参数将这些作为POST变量传递。

然后$ _POST将拥有所有,你可以$ params = $ this-> getRequest() - > getParams();

答案 5 :(得分:1)

使用Zend Framework 1.12,只需使用方法getParam()即可。请注意,getParam()的结果是 NULL表示没有可用键字符串表示1键数组表示多个键

否' id'值

http://domain.com/module/controller/action/

$id = $this->getRequest()->getParam('id');
// NULL

单身' id'值

http://domain.com/module/controller/action/id/122

$id = $this->getRequest()->getParam('id');
// string(3) "122"

多个' id'值:

http://domain.com/module/controller/action/id/122/id/2584

$id = $this->getRequest()->getParam('id');
// array(2) { [0]=> string(3) "122" [1]=> string(4) "2584" }

如果您总是希望代码中包含字符串,并且由于某种原因在网址中设置了更多值,则可能会出现问题:在某些情况下,您可能会遇到错误" 数组到字符串转换 "。以下是一些避免此类错误的技巧,以确保始终从getParam()获得所需的结果类型:

如果您希望$ id为数组(如果未设置param则为NULL)

$id = $this->getRequest()->getParam('id');
if($id !== null && !is_array($id)) {
    $id = array($id);
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/id/122
// array(1) { [0]=> string(3) "122" }

如果始终希望$ id为数组(如果未设置则不为NULL值,只是空数组):

$id = $this->getRequest()->getParam('id');
if(!is_array($id)) {
    if($id === null) {
        $id = array();
    } else {
        $id = array($id);
    }
}

http://domain.com/module/controller/action/
// array(0) { }

http://domain.com/module/controller/action/id/122
// array(1) { [0]=> string(3) "122" }

在一行中与上面相同(没有NULL,总是数组):

$id = (array)$this->getRequest()->getParam('id');

如果您希望$ id为字符串第一个可用的值,请保持NULL完整)

$id = $this->getRequest()->getParam('id');
if(is_array($id)) {
    $id = array_shift(array_values($id));
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/122/id/2584
// string(3) "122"

如果您希望$ id为字符串最后可用值,请保持NULL完整)

$id = $this->getRequest()->getParam('id');
if(is_array($id)) {
    $id = array_pop(array_values($id));
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/122/id/2584/id/52863
// string(5) "52863"

也许有更短/更好的方法来修复这些“响应类型”' getParam,但如果你打算使用上面的脚本,为它创建另一个方法(扩展帮助器或其他东西)可能更清晰。