如何使 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
}
我有一个数组 ($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
}