更短的For代码


Shorter code with For

有没有办法让这段代码更短?

If ($Item_1 != "_") { $items1 = explode("_", $Item_1); } Else {}
If ($Item_2 != "_") { $items2 = explode("_", $Item_2); } Else {}
If ($Item_3 != "_") { $items3 = explode("_", $Item_3); } Else {}
If ($Item_4 != "_") { $items4 = explode("_", $Item_4); } Else {}
If ($Item_5 != "_") { $items5 = explode("_", $Item_5); } Else {}
If ($Item_6 != "_") { $items6 = explode("_", $Item_6); } Else {}
If ($Item_7 != "_") { $items7 = explode("_", $Item_7); } Else {}
If ($Item_8 != "_") { $items8 = explode("_", $Item_8); } Else {}
If ($Item_9 != "_") { $items9 = explode("_", $Item_9); } Else {}
If ($Item_10 != "_") { $items10 = explode("_", $Item_10); } Else {}
If ($Item_11 != "_") { $items11 = explode("_", $Item_11); } Else {}
If ($Item_12 != "_") { $items12 = explode("_", $Item_12); } Else {}

我试着用For缩短它,但它不起作用,示例:

  For ($i = 1; $i <= 12; $i++) {
    If (${$Item_ . $i} != "_") .... dont work for me :/
}

任何想法?

这个主意不错。您只是在构建变量名时犯了一个小错误。使用以下代码:

for ($i = 1; $i <= 12; $i++) {
    if (${"Item_$i"} != "_") .... should work 
}

你所做的在php中被称为变量变量。有关进一步信息和示例,请参阅手册。


另一个想法:为什么不使用数组?这里应该更合适:

$item = array (
    'foo', 'bar', 'test', 'xyz', ...
);
for ($i = 1; $i <= count($item); $i++) {
    if ($item[$i] != "_") 
}

进一步注意,您可以使用三元运算符来缩短if语句。(请注意,在这种情况下我不会这样做,因为它的可读性较差,但为了完整性,我至少会提到它):

$item[$i] != "_" ? $other[$i] = 'something' : 1; // no else block, just a `NOP 1`;

为清楚起见,请这样做:

$item_var = "Item_".$i;
If ($$item_var != "_"){}

如果var1, var2等,您可能应该使用数组。你也可以很容易地使用循环。