我有一个数组($ 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语句但是我必须复制一些代码,这会增加维护的复杂性。
有解决方法吗?
感谢您的帮助。
答案 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
}