如何使foreach循环参数变量?

时间:2015-02-21 13:18:31

标签: php foreach

我有一个数组($ cart)我想在foreach循环中以相反顺序或正常顺序处理,具体取决于外部开关。下面的代码给出了我想要做的事情,

switch ($data['entire_receipt'])
    {
        case    'N':
            $foreach    =   'array_reverse($cart, true) as $line=>$item';
            break;
        case    'Y':
            $foreach    =   '$cart as $line=>$item';
            break;
        default:
            $foreach    =   'array_reverse($cart, true) as $line=>$item';
    }

    //foreach   $$foreach
    foreach ("$foreach")
    {
       // do something
    }

无论是反向还是正常顺序处理,foreach循环中的代码都完全相同。

上面的" foreach(" foreach")"线。

显然我可以使用if语句但是我必须复制一些代码,这会增加维护的复杂性。

有解决方法吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您不能简单地创建字符串并期望它们作为代码执行

switch ($data['entire_receipt']) {
    case 'Y' :
        $foreach = $cart;
        break;
    case 'N' :
    default  :
        $foreach = array_reverse($cart, true);
}

foreach ($foreach as $line => $item) {
   // do something
}

注意$ foreach是$ cart数组的副本,如果你想在你的foreach循环中直接修改$ cart数组,那么使用$ line值作为$ cart的键

答案 1 :(得分:0)

如果需要,Yo应该迭代相同的变量并反转数组。

if ($data['entire_receipt']) == 'N') {
    $cart = array_reverse($cart, true)
}

foreach ($cart as $line => $item) {
  // Do something
}