带范围的foreach不起作用

时间:2013-06-16 18:50:18

标签: php foreach range

这是我的代码:

   function my_function()
{
$states = array('schwarz', 'rot', 'blau');
foreach(range(0, 5) as $number) {
  foreach ($states as $state) {
    $result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$number\" />";
    $testPath = "transactions/Ordner$number/$state.png";
    if (file_exists($testPath)) {
      $result = $testPath;
    }
  }
  break;
}
return $result;
}
$imagesPerLine = array(1=>1, 2=>2); $default = 3;
$lines = array(1, 2, 3);
$html="";
foreach ($lines as $line) {
if (!isset($imagesPerLine[$line])) {
  $imagesPerLine[$line] = $default;
}
$html.= "<tr>\n";
for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
  $html.=sprintf("<td>%s</td>\n", my_function());
}
$html.="</tr>\n";

}
echo $html;

这是输出:

<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
</tr>
<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
</tr>
<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
</tr>

现在我不知道如何配置我的foreach部分以获取name-value = n + 1.输出应为:

<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td>
</tr>
<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.1" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.2" /></td>
</tr>
<tr>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.3" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.4" /></td>
<td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.5" /></td>
</tr>

首先我想,“打破;”或“返回$ result;”错了,但我现在不这么认为。 任何人都可以帮我改变我的剧本吗? 谢谢和问候!!

1 个答案:

答案 0 :(得分:0)

你的逻辑是有缺陷的。因为您从函数返回字符串并将其打印到外部,所以您需要更改您的操作方式。目前,您正在这样做:

for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
  $html.=sprintf("<td>%s</td>\n", my_function());
}

听起来像你需要让你的函数用<td>...</td>包装它的内容,并且还要连接。所以在你的功能中你应该这样做:

$result .= "<td>etc etc $number etc etc</td>\n";

$result = "";放在该函数的顶部也是一种好习惯。

现在,当您返回$result时,您应该将所有内容放在这些循环中,并通过更改调用循环将其添加到$html

for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
  $html .= my_function();
}