如何使 foreach 循环参数可变?

How to make the foreach loop arguments variable?

我有一个数组 ($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 语句,但是我将不得不复制 do something 代码,这增加了维护的复杂性。

有解决办法吗?

感谢您的帮助。

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

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 的键

你应该迭代相同的变量并在必要时反转数组。

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

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