Php 如何使foreach循环参数变为变量?

Php 如何使foreach循环参数变为变量?,php,foreach,Php,Foreach,我有一个数组($cart),我想在foreach循环中根据外部开关以相反顺序或正常顺序处理它。下面的代码给出了我要做的事情 switch ($data['entire_receipt']) { case 'N': $foreach = 'array_reverse($cart, true) as $line=>$item'; break; case 'Y':

我有一个数组($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语句,但是我必须复制dosomething代码,这增加了维护的复杂性

有解决办法吗


感谢您的帮助。

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

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
}

您必须使用来执行存储在字符串中的代码。谢谢您的回答。我知道eval是危险的,但因为我是从脚本中提供代码的,所以使用它似乎是可以的。eval()仍然会导致错误报告问题,这不仅仅是一个潜在的安全问题。。。。。在这种情况下完全没有必要使用eval()并不总是邪恶的->我可以也不会判断eval()在这里是否不合适,我要说的是,如果你想执行存储在字符串中的代码,这是一种方法。如果他使用eval(),他可以。。。但是大多数情况下,这不是很值得推荐的。是的,如果你使用eval()你可以,但是养成使用eval这样危险的东西的习惯是一个坏习惯,特别是当没有必要执行soeval()时,在错误处理方面也有严重的问题,而且不应该是解决任何问题的推荐方法。我决定不使用eval()。谢谢马克,我尝试了你的解决方案并接受了它。