Php 如何使foreach循环参数变为变量?
我有一个数组($cart),我想在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':
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()。谢谢马克,我尝试了你的解决方案并接受了它。